我有4个子图,我实现在1行上绘制3个子图,但是我不能在第二行上添加另一个图,它必须具有3个数字的相同宽度.前三个数字:

第二个数字,我想补充一下:
我试着这样:
plt.close()
font={'family':'sans-serif','weight':'normal','size':'14'}
plt.rc('font',**font)
fig, axes = plt.subplots(nrows=3, ncols=1)
plt.tight_layout(pad=0.05, w_pad=0.001, h_pad=2.0)
ax1 = plt.subplot(231) # creates first axis
#ax1.text(20, 2500, 'CYCLE :', size=14)
#ax1.text(1000, 2500, str((image)*50+50), size=14)
ax1.tick_params(labelsize=8)
ax1.set_xticks([0,2000,500,1000,1500])
ax1.set_yticks([0,2000,500,1000,1500])
ax1.tick_params(labelsize=8)
ax1.imshow(mouchetis[::-1,::],alpha=0.6)
ax1.imshow(V_exp_invmaskA,cmap='hot',extent=(X.min(),2015,Y.min(),2015), alpha=0.4)
i1 = ax1.imshow(V_maskA,cmap='hot',extent=(X.min(),2015,Y.min(),2015),alpha=0.8)
ax1.set_xticklabels([0,2000,500,1000,1500])
ax1.set_yticklabels([0,2000,500,1000,1500])
ax1.set_title("MASQUE A", y=1.05, fontsize=10)
ax2 = plt.subplot(232) # creates second axis
ax2.set_xticks([0,2000,500,1000,1500])
ax2.set_yticks([0,2000,500,1000,1500])
ax2.imshow(mouchetis[::-1,::],alpha=0.6)
ax2.imshow(V_exp_invmaskB,cmap='hot',extent=(X.min(),2015,Y.min(),2015), alpha=0.4)
i2 = ax2.imshow(V_maskB,cmap='hot',extent=(X.min(),2015,Y.min(),2015),alpha=0.8)
ax2.set_title("MASQUE B", y=1.05, fontsize=10)
ax2.set_xticklabels([])
ax2.set_yticklabels([])
ax3 = plt.subplot(233) # creates first axis
ax3.set_xticks([0,2000,500,1000,1500])
ax3.set_yticks([0,2000,500,1000,1500])
ax3.imshow(mouchetis[::-1,::],alpha=0.6)
ax3.imshow(V_exp_invmaskC,cmap='hot',extent=(X.min(),2015,Y.min(),2015), alpha=0.4)
i3 …Run Code Online (Sandbox Code Playgroud) 我正在尝试为以下图创建子图:
我用于图的代码是:
radius_mean1 = df[df['diagnosis']==1]['radius_mean']
radius_mean0 = df[df['diagnosis']==0]['radius_mean']
trace_rm1 = go.Histogram(x = radius_mean1, opacity = 0.75, name = 'malignant')
trace_rm2 = go.Histogram(x = radius_mean0, opacity = 0.75, name = 'benign')
data2 = [trace_rm1,trace_rm2]
layout2 = go.Layout(barmode = 'overlay', title = 'radius mean')
fig2 = go.Figure(data=data2, layout=layout2)
py.iplot(fig2)
Run Code Online (Sandbox Code Playgroud)
和其他情节类似
现在我使用以下代码创建子图:
fig.append_trace(fig1['data'][1], 1, 1)
fig.append_trace(fig2['data'][0], 2, 1)
py.iplot(fig)
Run Code Online (Sandbox Code Playgroud)
我如何在子图中添加良性和恶性结果?我似乎无法编辑[0]或[1]以显示两者,即将前两个图完全显示在我的子图中,显示恶性和良性,而不仅仅是一个或另一个.
以下代码生成我想要的图像,但颜色条为空白/白色,并且与数据不匹配:
def plot_array(da, ax=None, shift=True):
"""plots an array of lat by lon on a coastline map"""
m = basemap.Basemap()
m.drawcoastlines()
m.pcolormesh(da.lon, y=da.lat, data=da.T, latlon=True)
return m
# 'monthly mean' is an xarray DataArray
fig = plt.figure(0, (14, 8))
grid = ImageGrid(fig, 111, nrows_ncols=(3, 4), axes_pad=0.3,
cbar_mode='single', cbar_location="bottom",)
for i, m in enumerate(months):
plt.sca(grid[i])
plot_array(monthly_mean.sel(month=i + 1))
plt.title(m)
plt.suptitle("{b} - {y} monthly means".format(b=benchmark, y=year))
# plt.colorbar()
plt.tight_layout()
os.makedirs("plots/monthly_means/{y}".format(y=year), exist_ok=True)
plt.savefig("plots/monthly_means/{y}/{b}_{y}.png".format(b=benchmark, y=year))
plt.close()
Run Code Online (Sandbox Code Playgroud)
我还需要做些什么才能使颜色条与 ImageGrid 一起工作,还是 ImageGrid 和 Basemap 不能很好地协同工作?
我有一个大小相等的 3x2 网格。我使用命令
plt.suptitle("Awesome title") # (1)
Run Code Online (Sandbox Code Playgroud)
在 6 个图上方有一个居中的标题。我使用命令
plt.title("Almost awesome title") # (2)
Run Code Online (Sandbox Code Playgroud)
对于每个子图上方的特定标题。现在是棘手的部分:我想要在子图的第一行和第二行之间有一个居中的标题。将 (2) 的位置参数操作为 (1.1 , 1.0) 之类的值后,我似乎无法获得格式正确/格式良好的图形。
TL; DR:我想要一个附加的plt.suptitle("Title"),如下图所示:(photoshopped)
目标:使用 for 循环生成 100 个条形图,并将输出显示为子图图像
数据格式:具有 101 列的数据文件。最后一列是 X 变量;剩下的 100 列是 Y 变量,针对这些变量绘制了 x。
所需输出:5 x 20 子图阵列中的条形图,如本示例图像所示:
当前方法:我一直在 seaborn 中使用 PairGrid,它生成一个 nx 1 数组:
.
其中输入==数据帧;input3 == 调用列标题的列表:
for i in input3:
plt.figure(i)
g = sns.PairGrid(input,
x_vars=["key_variable"],
y_vars=i,
aspect=.75, size=3.5)
g.map(sns.barplot, palette="pastel")
Run Code Online (Sandbox Code Playgroud)
有没有人有任何想法如何解决这个问题?
我正在绘制共享相同 x 轴的两个子图,但是当我绘制时,我只看到第二个子图上的 x 轴刻度。如何使两个子图上的 x-ticks 都可见?
此外,我想为两个子图设置 y 标签,但只有第二个可见。你能帮忙在两个子图上显示 y 标签吗?
下面是我的可重现代码。
#!/usr/bin/python3
import pandas as pd
desired_width = 1500
pd.set_option('display.width', desired_width)
import matplotlib.pyplot as plt
import numpy as np
df = pd.DataFrame([{'DATETIME': '2017-09-29 01:00,', 'Population': 1000, 'Temp': 90, 'State': 'California'},
{'DATETIME': '2017-09-29 01:00,', 'Population': 2000, 'Temp': 70, 'State': 'Illinois'},
{'DATETIME': '2017-09-29 01:00,', 'Population': 3000, 'Temp': 50, 'State': 'Georgia'},
{'DATETIME': '2017-09-29 02:00,', 'Population': 2000, 'Temp': 40, 'State': 'California'},
{'DATETIME': '2017-09-29 02:00,', 'Population': 6000, 'Temp': 20, 'State': 'Illinois'},
{'DATETIME': '2017-09-29 …Run Code Online (Sandbox Code Playgroud) 我想用左上角的字母(A,B,C,...)来标记子图,这些字母要么与 ylabels 对齐,要么与子图的实际角(而不是轴)对齐。
如果子图的宽度不同,我不能再使用轴变换坐标中带有偏移的文本,因为这会导致每个子图的距离不同。所以我通常使用偏移变换。但如果 ylabel 具有不同的宽度,这将不再起作用。我目前还关注每个图的偏移量,但这还不够好。
这是我到目前为止所拥有的:
import matplotlib.pyplot as plt
from matplotlib import transforms
import numpy as np
fig = plt.figure(figsize=(5, 2), constrained_layout=True)
gs = fig.add_gridspec(1, 3, width_ratios=[1, 2, 3])
axes = [fig.add_subplot(gs[i]) for i in range(3)]
ylabels = ["flat label", "bigger\nlabel", "even\nbigger\nlabel"]
labels = ["A", "B", "C"]
scaledtrans = transforms.ScaledTranslation(-0.4, 0, fig.dpi_scale_trans)
for ax, ylabel, label in zip(axes, ylabels, labels):
ax.set_ylabel(ylabel)
ax.text(0, 1, label, fontsize=12, fontweight="bold", va="bottom", ha="left",
transform=ax.transAxes + scaledtrans)
Run Code Online (Sandbox Code Playgroud)
如下图所示,标签与轴脊的距离相同,但我希望它们与 ylabel 的左边缘或子图的角对齐,在这种情况下,它们与 ylabel 水平重合。但没有 transSubplot,只有 transAxes …
我在同一个图中使用subplotsin plotly创建了两个图。
import plotly.graph_objects as go
import numpy as np
import pandas as pd
from plotly.subplots import make_subplots
df = pd.DataFrame(np.random.randint(0, 100, size=(20, 5)), columns=list('tABCD'))
df2 = pd.DataFrame(np.random.randint(0, 100, size=(20, 5)), columns=list('tABCD'))
fig = go.Figure()
fig = make_subplots(rows=1, cols=2)
fig.add_trace(go.Scatter(
x=df.t,
y=df['A'],
name="1",
line_color='deepskyblue',
opacity=0.8,
legendgroup='group1'),
row=1, col=1
)
fig.add_trace(go.Scatter(
x=df.t,
y=df['B'],
name="2",
line_color='dimgray',
opacity=0.8,
legendgroup='group2'),
row=1, col=1
)
fig.add_trace(go.Scatter(
x=df.t,
y=df['C'],
name="3",
line_color='blue',
opacity=0.8,
legendgroup='group3'),
row=1, col=1
)
fig.add_trace(go.Scatter(
x=df.t,
y=df['D'],
name="4",
line_color='red',
opacity=0.8,
legendgroup='group4'),
row=1, col=1 …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个包含 8 个子图(4 行和 2 列)的图。为此,我编写了这段代码来读取 x 和 y 数据并按以下方式绘制它:
fig, axs = plt.subplots(4, 2, figsize=(15,25))
y_labels = ['k0', 'k1']
for x in range(4):
for y in range(2):
axs[x, y].scatter([i[x] for i in X_vals], [i[y] for i in y_vals])
axs[x, y].set_xlabel('Loss')
axs[x, y].set_ylabel(y_labels[y])
Run Code Online (Sandbox Code Playgroud)
但是,我想通过以下方式向所有行(而不是绘图)添加标题(标题为黄色文本):
我在这里找到了这张图片和一些执行此操作的方法,但我无法为我的用例实现此操作并收到错误。这是我尝试过的:
gridspec = axs[0].get_subplotspec().get_gridspec()
subfigs = [fig.add_subfigure(gs) for gs in gridspec]
for row, subfig in enumerate(subfigs):
subfig.suptitle(f'Subplot row title {row}')
Run Code Online (Sandbox Code Playgroud)
这给了我错误:'numpy.ndarray' object has no attribute 'get_subplotspec'
所以我将代码更改为:
gridspec = axs[0, 0].get_subplotspec().get_gridspec()
subfigs = …Run Code Online (Sandbox Code Playgroud) plotly.express.histogram()我想使用每个子图都有自己的 x轴和 y 轴(为了更好的可读性)来绘制具有行和列面的直方图。在查看文档时(例如,转到“直方图分面网格”部分),我可以看到很多重复 x 轴和 y 轴的示例。但就我而言,这并不是自动完成的。
import numpy as np
import pandas as pd
import plotly.express as px
# create a dummy dataframe with lots of variables
rng = np.random.default_rng(42)
n_vars = 3
n_samples = 10
random_vars = [rng.normal(size=n_samples) for v in range(n_vars)]
m = np.vstack(random_vars).T
columns = pd.MultiIndex.from_tuples([('a','b'),('a','c'),('b','c')],names=['src','tgt'])
df = pd.DataFrame(m,columns=columns)
# convert to long format
df_long = df.melt()
# plot with plotly
fig = px.histogram(df_long,x='value',facet_row='src',facet_col='tgt')
fig.update_layout(yaxis={'side': 'left'})
fig.show()
Run Code Online (Sandbox Code Playgroud)
这给了我:
如何事后配置图形以便为每个子图显示 x 轴和 y …
subplot ×10
python ×8
matplotlib ×7
plotly ×3
for-loop ×1
histogram ×1
legend ×1
pandas ×1
plot ×1
python-2.7 ×1
python-3.x ×1
text ×1
title ×1
transform ×1