我想绘制一个箱形图(pandas)和同一轴上的中位数回归。不幸的是,它没有按预期工作。既不
fig, ax = plt.subplots(ncols=1)
data.boxplot(xxx, ax=ax)
ax.plot(xreg, yreg)
,也不
fig, ax = plt.subplots(ncols=1)
bplot = data.boxplot(xxx, ax=ax)
bplot.plot(xreg, yreg)
最后一种方法似乎工作得更好x不适合。可能是什么原因以及如何在两个轴上获得相同的比例?
fig, ax = plt.subplots(ncols=1)
ax1 = ax.twiny()
bplot = data.boxplot(xxx, ax=ax)
ax1.plot(xreg, yreg)
原因可能是轴的缩放:
ax.get_xlim()
(0.5, 4.5)
ax1.get_xlim()
(-4.0, 84.0)
如果我只绘制回归和没有箱线图的中位数,一切正常:
答案 0 :(得分:3)
通过查看documentation of plt.boxplot
,我们发现这些框默认位于索引位置0,1,2,...。因此,N个框的轴限制为[-0.5,N + 0.5]。
文档还告诉我们,可以使用positions
参数更改框的位置。
使用这个参数,我们可以将框定位在沿x轴的任何位置,然后可能需要调整它们的宽度,如果它们的间距变得非常大或很小。
完整示例:
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0,70)
f = lambda x: 6*np.exp(-x/50.)
pos = [10, 40, 48, 64]
a = np.empty((100,len(pos)))
for i, p in enumerate(pos):
a[:,i] = np.random.normal(loc=f(p), size=a.shape[0])
plt.boxplot(a, positions=pos, widths=5)
plt.plot(x, f(x))
plt.xlim(0,70)
plt.show()