从pandas

时间:2018-05-04 19:33:23

标签: python pandas matplotlib visualization

我正在尝试重现这个图表 - 每个点都有一个箱线图的线图:

Imgur

然而,线图总是从原点开始,而不是从第一个x刻度开始:

Imgur

我已经在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

如上所示,线图不与箱线图

对齐

1 个答案:

答案 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()

enter image description here