问题描述
import matplotlib.pyplot as plt
import numpy as np
fig,axes = plt.subplots(nrows=1,ncols=2,figsize=(9,4))
# generate some random test data
all_data = [np.random.normal(0,std,100) for std in range(6,10)]
# plot violin plot
axes[0].violinplot(all_data,showmeans=False,showmedians=True)
axes[0].set_title('violin plot')
此代码有效,但我只想将第一个子图作为单独的图,因此我更改为 plt.figure 并删除与轴 [1] 相关的部分,但我无法再使用小提琴图!
我还尝试了使用 sns.violinplot
的单独绘图,但它旋转小提琴并将它们全部绘制在彼此之上。提示?
解决方法
对于简单的单图,使用 matplotlib 的 M5.7.2<-matrix(sample(1:4,16,replace=TRUE),nrow=4,ncol=4)
Q5.7.2<-function(X,rownum=FALSE){
if(rownum==TRUE)
z <-(1:nrow(X))[apply(X == max(X),1,any)]
x<-which(M5.7.2 == max(M5.7.2),arr.ind = TRUE)
list(z,x,M5.7.2)
}
Q5.7.2(M5.7.2,TRUE)
接口通常比面向对象的接口更容易。有些函数在这些接口之间有不同的名称,例如pyplot
对应于 plt.title()
。
ax.set_title()
,
如果您使用 fig = plt.figure()
创建图形,您仍然需要使用 add_subplot()
在此图形中创建子图。您可以按如下方式执行此操作:
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure(figsize=(9,4))
axes = fig.add_subplot()
# generate some random test data
all_data = [np.random.normal(0,std,100) for std in range(6,10)]
# plot violin plot
axes.violinplot(all_data,showmeans=False,showmedians=True)
axes.set_title('violin plot')
这会产生下图:
请注意,fig,axes = plt.subplots()
只是上面两行的简写,ncols
和 nrows
的默认值是 1
,因此您可以简单地从您的原始代码,它也可以工作:
import matplotlib.pyplot as plt
import numpy as np
fig,axes = plt.subplots(figsize=(9,4))
# generate some random test data
all_data = [np.random.normal(0,showmedians=True)
axes.set_title('violin plot')