我正在使用subplot其中包含三个不同的图。每个情节都有自己的标签和标题。
问题是我保存时必须最大化绘图。否则,文本将相互重叠。
当我最大化它时,即使我使用 ESP 格式或任何矢量格式,子图的标签文本在图像中也会显得有点模糊。
我该如何解决这个问题?
我有一系列相关的函数,我用 绘制matplotlib.pyplot.subplots,并且我需要在每个子图中包含相应函数的缩放部分。
我开始像这里解释的那样这样做,当只有一个图但没有子图时它可以完美地工作。
如果我用子图来做,我只会得到一个图,其中包含所有函数。这是我到目前为止得到的一个例子:
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(-10, 10, 0.01)
sinx = np.sin(x)
tanx = np.tan(x)
fig, ax = plt.subplots( 1, 2, sharey='row', figsize=(9, 3) )
for i, f in enumerate([sinx, cosx]):
ax[i].plot( x, f, color='red' )
ax[i].set_ylim([-2, 2])
axx = plt.axes([.2, .6, .2, .2],)
axx.plot( x, f, color='green' )
axx.set_xlim([0, 5])
axx.set_ylim([0.75, 1.25])
plt.show(fig)
Run Code Online (Sandbox Code Playgroud)
该段代码给出了下图:
如何在每个子图中创建新的轴和绘图?
我尝试使用matplotlib.pyplot如下方式拟合四张图像:
| plot1 | plot2|
| plot3 |
| plot4 |
Run Code Online (Sandbox Code Playgroud)
我发现的大多数例子都涵盖了三个这样的图:
ax1 = plt.subplot(221)
ax2 = plt.subplot(222)
ax3 = plt.subplot(212)
Run Code Online (Sandbox Code Playgroud)
这成功地绘制了三个图(但是,我不明白它是如何完成的ax3)。现在,我想将情节 4 添加到此安排中。无论我尝试什么,我都无法成功。
你能指导我如何实现它吗?
我有一个函数可以绘制 DataFrame 相关矩阵的热图。该函数如下所示:
def corr_heatmap(data):
columns = data.columns
corr_matrix = data.corr()
fig, ax = plt.subplots(figsize=(7, 7))
mat = ax.matshow(corr_matrix, cmap='coolwarm')
ax.set_xticks(range(len(columns)))
ax.set_yticks(range(len(columns)))
ax.set_xticklabels(columns)
ax.set_yticklabels(columns)
plt.setp(ax.get_xticklabels(), rotation=45, ha='left', rotation_mode='anchor')
plt.colorbar(mat, fraction=0.045, pad=0.05)
fig.tight_layout()
plt.show()
return mat
Run Code Online (Sandbox Code Playgroud)
当使用 DataFrame 运行时,输出如下所示:
我想要做的是并排绘制这些热图中的两个,但我在这样做时遇到了一些麻烦。到目前为止,我所做的是尝试将每个热图分配给 AxesImage 对象并使用子图绘制它们。
mat1 = corr_heatmap(corr_mat1)
mat2 = corr_heatmap(corr_mat2)
fig = plt.figure(figsize=(15, 15))
ax1 = fig.add_subplot(221)
ax2 = fig.add_subplot(222)
ax1.plot(ma1)
ax2.plot(ma2)
Run Code Online (Sandbox Code Playgroud)
但这给了我以下错误:
TypeError: float() argument must be a string or a number, not 'AxesImage'
Run Code Online (Sandbox Code Playgroud)
有人会碰巧知道一种可以并排绘制两个热图图像的方法吗?谢谢你。
编辑
如果有人想知道我想做的最终代码是什么样的:
def corr_heatmaps(data1, data2, method='pearson'):
# …Run Code Online (Sandbox Code Playgroud) 我刚刚开始学习 pandas,当我想制作 2013 年车站平均值的条形图时,创建一个 fig, ax = plt.subplots()对象并将该图添加到创建的 ax' 我在运行这部分代码时收到此错误' Line2D' 对象没有属性 'kind'
\nfig,ax = plt.subplots(1)\nx= data.columns\ny=data['2013'].mean()\nax.plot(x,y,kind='bar')\n```````````````````````\n\n[this is my DATASET]\n\n L06_347 LS06_347 LS06_348\nTime \n2009-01-01 00:00:00 0.137417 0.097500 0.016833\n2009-01-01 03:00:00 0.131250 0.088833 0.016417\n2009-01-01 06:00:00 0.113500 0.091250 0.016750\n2009-01-01 09:00:00 0.135750 0.091500 0.016250\n... ... ... ...\n2013-01-01 15:00:00 1.420000 1.420000 0.096333\n2013-01-01 18:00:00 1.178583 1.178583 0.083083\n2013-01-01 21:00:00 0.898250 0.898250 0.077167\n2013-01-02 00:00:00 0.860000 0.860000 0.075000\n11697 rows \xc3\x97 3 columns\nRun Code Online (Sandbox Code Playgroud)\n\n另一方面,我尝试使用此代码选择所有不同年份的四月、五月和六月的所有数据
\n\ndata[(data.index.month == 4) & (data.index.month == 5) & (data.index.month == 6)]\nRun Code Online (Sandbox Code Playgroud)\n\n … 我决定尝试一下这个示例代码。我能够弄清楚如何在两个子图之间绘制一条直线,即使该线位于其中一个子图的边界之外。
import matplotlib.pyplot as plt
import matplotlib as mpl
import numpy as np
fig = plt.figure(figsize=(10, 5))
ax1 = fig.add_subplot(121)
ax2 = fig.add_subplot(122)
axs = [ax1, ax2]
# Fixing random state for reproducibility
np.random.seed(19680801)
# generate some random test data
all_data = [np.random.normal(0, std, 100) for std in range(6, 10)]
# plot violin plot
axs[0].violinplot(all_data,
showmeans=False,
showmedians=True)
axs[0].set_title('Violin plot')
# plot box plot
axs[1].boxplot(all_data)
axs[1].set_title('Box plot')
# adding horizontal grid lines
for ax in axs:
ax.yaxis.grid(True)
ax.set_xticks([y + …Run Code Online (Sandbox Code Playgroud) z = {'A': [0.3618426, 0.36146951], 'B': [1.8908799, 1.904695], 'C': [2.1813462e+08, 2.1833622e+08], 'D': [0.89925492, 0.89953589], 'E': [2.6356747, 2.6317911], 'F': [2.2250445e+08, 2.2501808e+08], 'G': [2.0806053e+08, 2.0691238e+08], 'H': [0.37242803, 0.37611806]}
k = [1,2]
for key in z:
plt.subplot(4,4,1)
plt.plot(k,[z[key][0],z[key][1]], 'ro-')
plt.show()
Run Code Online (Sandbox Code Playgroud)
我会尽量说清楚。z 是一个大小不一的字典。我想做的是绘制字典数量,比如 4 列,但行应该根据生成的图数量增加,例如,如果有 16 个要绘制的键,我应该最终得到 4 行 4 列的数字。如何我可以这样做吗?
我有几个组,每个组有几个类,我测量了连续值:
set.seed(1)
df <- data.frame(value = c(rnorm(100,1,1), rnorm(100,2,1), rnorm(100,3,1),
rnorm(100,3,1), rnorm(100,1,1), rnorm(100,2,1),
rnorm(100,2,1), rnorm(100,3,1), rnorm(100,1,1)),
class = c(rep("c1",100), rep("c2",100), rep("c3",100),
rep("c2",100), rep("c4",100), rep("c1",100),
rep("c4",100), rep("c3",100), rep("c2",100)),
group = c(rep("g1",300), rep("g2",300), rep("g3",300)))
df$class <- factor(df$class, levels =c("c1","c2","c3","c4"))
df$group <- factor(df$group, levels =c("g1","g2","g3"))
Run Code Online (Sandbox Code Playgroud)
并非数据中的每个组都具有相同的类,或者换句话说,每个组都具有所有类的子集。
我试图R plotly为每个组生成密度曲线,按类别进行颜色编码,然后使用plotlyssubplot函数将它们全部组合成一个图。
这就是我正在做的:
library(dplyr)
library(ggplot2)
library(plotly)
set.seed(1)
df <- data.frame(value = c(rnorm(100,1,1), rnorm(100,2,1), rnorm(100,3,1),
rnorm(100,3,1), rnorm(100,1,1), rnorm(100,2,1),
rnorm(100,2,1), rnorm(100,3,1), rnorm(100,1,1)),
class = c(rep("c1",100), rep("c2",100), rep("c3",100),
rep("c2",100), rep("c4",100), rep("c1",100),
rep("c4",100), rep("c3",100), rep("c2",100)),
group …Run Code Online (Sandbox Code Playgroud) 我试图在 2x2 子图中绘制 4 个 Shap 依赖图,但无法使其工作。我已经尝试过以下方法:
fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(10,10))
ax1 = plt.subplot(221)
shap.dependence_plot('age', shap_values[1], X_train, ax=ax1)
ax2 = plt.subplot(222)
shap.dependence_plot('income', shap_values[1], X_train, ax=ax2)
ax3 = plt.subplot(223)
shap.dependence_plot('score', shap_values[1], X_train, ax=ax2)
Run Code Online (Sandbox Code Playgroud)
和这个:
plt.figure(figsize=(10,5))
plt.subplot(1,2,1)
shap.dependence_plot('age', shap_values[1], X_train)
plt.subplot(1,2,2)
shap.dependence_plot('income', shap_values[1], X_train)
plt.subplot(2,2,3)
shap.dependence_plot('score', shap_values[1], X_train)
plt.tight_layout()
plt.show()
Run Code Online (Sandbox Code Playgroud)
它不断将它们绘制在不同的行上,而不是 2x2 格式。
该线程的延续:如何在 Julia Plots 中创建任意数量的子图
当我尝试时
using Plots
plot_array = Any[]
for i in 1:5
push!(plot_array, plot(rand(10))) # make a plot and add it to the plot_array
end
plot(plot_array)
Run Code Online (Sandbox Code Playgroud)
我收到错误:
MethodError: no method matching Plots.Plot{Plots.PlotlyBackend}(::Char, ::Char, ::Char, ::Char, ...)
Closest candidates are: Plots.Plot{Plots.PlotlyBackend}(::Any, ::Any, ::Any, ::Any, ::Any, ::Any, ::Any, ::Any, ::Any, ::Any)
Run Code Online (Sandbox Code Playgroud)
我错过了什么?