我正在尝试重现这个图表 - 每个点都有一个箱线图的线图:
然而,线图总是从原点开始,而不是从第一个x刻度开始:
我已经在pandas文件中收集了我的数据结构,每个列标题都是k_e(x轴),列是所有数据点。
我正在绘制每列的平均值和箱图,如下所示:
df = df.astype(float)
_, ax = plt.subplots()
df.mean().plot(ax = ax)
df.boxplot(showfliers=False, ax=ax)
plt.xlabel(r'$k_{e}$')
plt.ylabel('Test error rate')
plt.title(r'Accuracies with different $k_{e}$')
plt.show()
我已经提到了下面的链接,所以我正在通过' ax'位置,但这没有帮助。
plot line over boxplot using pandas DateFrame
编辑:这是一个最小的例子:
test_errors_dict = dict() np.random.seed(40)
test_errors_dict[2] = np.random.rand(20)
test_errors_dict[3] = np.random.rand(20)
test_errors_dict[5] = np.random.rand(20)
df = pd.DataFrame(data=test_errors_dict)
df = df.astype(float)
_, ax = plt.subplots()
df.mean().plot(ax=ax)
df.boxplot(showfliers=False, ax=ax)
plt.show()
结果: Imgur
如上所示,线图不与箱线图
对齐答案 0 :(得分:1)
方框位于1,2,3位,而位置位于2,3,5位。您可以重新索引mean
系列以使用位置1,2,3。
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
test_errors_dict = dict()
np.random.seed(40)
test_errors_dict[2] = np.random.rand(20)
test_errors_dict[3] = np.random.rand(20)
test_errors_dict[5] = np.random.rand(20)
df = pd.DataFrame(data=test_errors_dict)
df = df.astype(float)
mean = df.mean()
mean.index = np.arange(1,len(mean)+1)
_, ax = plt.subplots()
mean.plot(ax=ax)
df.boxplot(showfliers=False, ax=ax)
plt.show()