有什么方法可以像在 Matlab 中的 subplot(n,m,x) 中那样在 gnuplot 的 multiplot 模式中选择一个子图,其中 x 是我想要绘制的那个?我首先在红色图形上使用线点绘制三个点,然后我想用黑色绘制一个点,而不是通过线连接到任何其他点。
我有 7 个 pi 图表(下面列出了 4 个)。我正在尝试创建一个仪表板,第一行有 4 个饼图,第二行有 3 个饼图。不知道下面的代码哪里出了问题。有没有其他选择来实现这一目标?任何帮助,将不胜感激。
from matplotlib import pyplot as PLT
fig = PLT.figure()
ax1 = fig.add_subplot(221)
line1 = plt.pie(df_14,colors=("g","r"))
plt.title('EventLogs')
ax1 = fig.add_subplot(223)
line2 = plt.pie(df_24,colors=("g","r"))
plt.title('InstalledApp')
ax1 = fig.add_subplot(222)
line3 = plt.pie(df_34,colors=("g","r"))
plt.title('Drive')
ax1 = fig.add_subplot(224)
line4 = plt.pie(df_44,colors=("g","r"))
plt.title('SQL Job')
ax1 = fig.add_subplot(321)
line5 = plt.pie(df_54,colors=("g","r"))
plt.title('Administrators')
ax2 = fig.add_subplot(212)
PLT.show()
Run Code Online (Sandbox Code Playgroud) 我目前有 2 个使用 seaborn 的子图:
import matplotlib.pyplot as plt
import seaborn.apionly as sns
f, (ax1, ax2) = plt.subplots(2, sharex=True)
sns.distplot(df['Difference'].values, ax=ax1) #array, top subplot
sns.boxplot(df['Difference'].values, ax=ax2, width=.4) #bottom subplot
sns.stripplot([cimin, cimax], color='r', marker='d') #overlay confidence intervals over boxplot
ax1.set_ylabel('Relative Frequency') #label only the top subplot
plt.xlabel('Difference')
plt.show()
Run Code Online (Sandbox Code Playgroud)
这是输出:
我对如何使 ax2(下图)相对于 ax1(上图)变得更短感到困惑。我正在查看 GridSpec ( http://matplotlib.org/users/gridspec.html ) 文档,但我不知道如何将它应用于 seaborn 对象。
题:
感谢您的时间。
我正在尝试使用and对两个图像myImage和ReflectanceImage进行子绘制,问题是该图形显示在控制台中而不是在新窗口中,我需要将该图形放在一个新的单独窗口中才能保存并在外部使用代码。matplotlibplt
我相信问题实际上与我使用的Linux (Ubuntu)版本有关?或者我遗漏了一些代码?
import matplotlib.pyplot as plt
import numpy as np
import cv2
img_directory = "/XXX/XXX/IMG_XXX.TIF"
myImage=cv2.imread(img_directory)
plt.figure()
plt.subplot(221), plt.imshow(myImage),plt.title('Original Image')
plt.subplot(222),
plt.imshow(np.array(reflectanceImage).reshape(1280,960).T),plt.title('Reflectance')pRun Code Online (Sandbox Code Playgroud)
感谢您的帮助。
用以下捕获在python中创建(3,3)子图矩阵的最佳方法是什么:
最后两个子图的大小应相等。这意味着它们将在其他两列的中间图的中间相遇。
我尝试使用gridspec进行此操作,但到目前为止还没有解决。
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import gridspec
# generate some data
x = np.arange(0, 10, 0.2)
y = np.sin(x)
# plot it
fig = plt.figure(figsize=(8, 6))
gs = gridspec.GridSpec(3, 3)
ax0 = plt.subplot(gs[0])
ax0.plot(x, y)
ax1 = plt.subplot(gs[1])
ax1.plot(y, x)
ax3 = plt.subplot(gs[3])
ax3.plot(y, x)
ax4 = plt.subplot(gs[4])
ax4.plot(y, x)
ax6 = plt.subplot(gs[6])
ax6.plot(y, x)
ax7 = plt.subplot(gs[7])
ax7.plot(y, x)
plt.tight_layout()
plt.savefig('grid_figure.png')
plt.show()
Run Code Online (Sandbox Code Playgroud)
我在这里有一个(非常简化的)代码段,用于我正在处理的一个开源项目,用于从 STDF 数据绘制 ATE 结果......
def plot_everything_from_one_test(test_data, data, num_of_sites, test_tuple):
plt.figure()
# Title for everything
plt.suptitle("Test Information Goes Here")
# Find the limits
low_lim = get_plot_min(data, test_tuple, num_of_sites)
hi_lim = get_plot_max(data, test_tuple, num_of_sites)
######
table = function_that_returns_a_dataframe()
plt.subplot(121)
# HOW WOULD I ACTUALLY PUT A DATAFRAME HERE
######
# Plots the trendline
plt.subplot(222)
plot_full_test_trend(test_data, low_lim, hi_lim)
plt.title("Trendline")
# Plots the histogram
plt.subplot(224)
plot_full_test_hist(test_data, low_lim, hi_lim)
plt.title("Histogram")
plt.show()
Run Code Online (Sandbox Code Playgroud)
基本上,我真正想要做的就是在子图部分 (121) 中简单地呈现一个包含数组或数据帧或其他内容的表格。这个数据框恰好有 10 列宽和无限长(大约 10 秒的数量级,但可以根据需要进行修剪)。我环顾四周,我知道 matplotlib 有 table(),但是从我所看到的,它创建了一个新图形(不需要的),并且它也试图强制图形在它上面呈现,即使我真的没有想要渲染,因为它真的没用。我看到这可以被规避,但我不知道如何在保留我的次要情节的同时管理它。也许我只是不明白 matplotlib 如何与它们一起工作。
另一个问题是,当我可以某种程度地获取要呈现的表格时,它们的速度非常慢,达到一分钟以上才能呈现 …
我找到并改编了以下代码片段,用于生成线性回归的诊断图。这是目前使用以下功能完成的:
def residual_plot(some_values):
plot_lm_1 = plt.figure(1)
plot_lm_1 = sns.residplot()
plot_lm_1.axes[0].set_title('title')
plot_lm_1.axes[0].set_xlabel('label')
plot_lm_1.axes[0].set_ylabel('label')
plt.show()
def qq_plot(residuals):
QQ = ProbPlot(residuals)
plot_lm_2 = QQ.qqplot()
plot_lm_2.axes[0].set_title('title')
plot_lm_2.axes[0].set_xlabel('label')
plot_lm_2.axes[0].set_ylabel('label')
plt.show()
Run Code Online (Sandbox Code Playgroud)
用类似的东西调用:
plot1 = residual_plot(value_set1)
plot2 = qq_plot(value_set1)
plot3 = residual_plot(value_set2)
plot4 = qq_plot(value_set2)
Run Code Online (Sandbox Code Playgroud)
如何创建subplots以便将这 4 个图显示在 2x2 网格中?
我试过使用:
fig, axes = plt.subplots(2,2)
axes[0,0].plot1
axes[0,1].plot2
axes[1,0].plot3
axes[1,1].plot4
plt.show()
Run Code Online (Sandbox Code Playgroud)
但收到错误:
AttributeError: 'AxesSubplot' object has no attribute 'plot1'
Run Code Online (Sandbox Code Playgroud)
我应该从函数内部还是其他地方设置轴属性?
我想为包含多个子图的图形添加一个标题。
这是我的代码:
import matplotlib.pyplot as plt
plt.figure(figsize = (15, 80))
for i, audio, rate, name in zip(range(len(audios)), audios, rates, names):
plt.subplot(len(audios), 1, i+1)
plt.plot(rate, audio)
plt.xlabel('Time (s)')
plt.ylabel('Amplitude')
plt.title(name)
plt.subtitle('Figure 1: Plot amplitude of signal')
plt.show()
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:module 'matplotlib.pyplot' has no attribute 'subtitle'
我不知道为什么这不起作用,因为它在 matplotlib 文档中是这样写的!感谢您的帮助。
我正在 matplotlib 的add_subplot()函数中创建一个图形。
当我运行这个
ax1 = fig.add_subplot(231)
ax2 = fig.add_subplot(232)
ax3 = fig.add_subplot(233)
ax4 = fig.add_subplot(212) # why not 211
Run Code Online (Sandbox Code Playgroud)
我得到这个输出
我的问题是这最后一个论点是如何运作的。为什么 ax4 是 212 而不是 211,因为第二行只有一个图?
如果我使用 211 而不是 212 运行,如下所示:
ax1 = fig.add_subplot(231)
ax2 = fig.add_subplot(232)
ax3 = fig.add_subplot(233)
ax4 = fig.add_subplot(211)
Run Code Online (Sandbox Code Playgroud)
我得到这个输出,其中 Plot 4 放在第一行的 Plot 2 上。
如果有人能解释索引是如何工作的,我将不胜感激。花了不少时间研究还是没搞懂。
对于每个子图,我有 3 条单独的线:2017 年、2018 年和 2019 年有 3 次“go.Scatter”,每个子图都代表一个国家(25 个国家),并且始终是这 3 年。我可以使用 subplot 示例代码,但是所有 75 个图例(25 X 3)都将使用不同的颜色放在一起,而且很乱。
我不需要在不同的子图上使用不同的颜色,我可以在所有子图的 3 年中只使用 3 种不同的颜色和 3 个图例,如果我点击例如 2017 年所有 2017 年的曲线/线消失在 25子图。
任何人都可以分享示例代码吗?出于说明目的,它可以是 2 而不是 25。我在 Plotly 网站上找不到这个示例代码。
编辑:这是一个示例代码:
from plotly.subplots import make_subplots
import plotly.graph_objects as go
from plotly import offline
fig = make_subplots(rows=3, cols=1)
fig.add_trace(go.Scatter(
x=[3, 4, 5],
y=[1000, 1100, 1200],name="2017",
), row=1, col=1)
fig.add_trace(go.Scatter(
x=[2, 3, 4],
y=[1200, 1100, 1000],name="2018",
), row=1, col=1)
fig.append_trace(go.Scatter(
x=[2, 3, 4],
y=[100, 110, 120],name="2017", …Run Code Online (Sandbox Code Playgroud)