【问题标题】:How to overlay a boxplot and a lineplot?如何叠加箱线图和线图?
【发布时间】:2021-05-19 07:15:57
【问题描述】:

我创建了一个箱形图。然后我想画一条线来代表每个箱线图的平均值。我正在处理不覆盖的问题。线图从比箱线图更早的点开始:

红线应该再移动一点。我的代码:

import os
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib qt


my_list=[]
label=[]
filenames = [f for f in sorted(os.listdir('.')) if f.endswith('.dat')]
my_mean = []
for filename in filenames:
#     df = pd.read_csv('fras2009_flat_r9_parameters.dat', sep="\s+", header=None)
    df=pd.read_csv(filename,sep="\s+", header=None)

    
    beta = df[4]
    beta = beta.drop(beta.index[0:100])
    beta_1 = pd.to_numeric(beta, errors='coerce')
    my_list.append(beta_1)
    mean = beta_1.mean()
    my_mean.append(mean)
    

#     mean.index = np.arange(1,len(mean)+1)
    #label.append(filename)
labels = ['C_r 03','C_r 05','C_r 0.1','C_r 0.2','C_r 0.5','C_r 1','C_r 2','Unconfined']

plt.xticks(np.arange(len(label)),label)
plt.boxplot(my_list,labels=labels)
# _, ax = plt.subplots()
# # mean.plot(ax=ax)
plt.plot(my_mean,color='r')

【问题讨论】:

  • plt.plot(np.arange(len(my_mean))+1, my_mean, color='r')plt.xticks(np.arange(len(label))+1, label) 也应该让线图从位置 1 开始,就像箱线图一样。注意plt.plot 应该早于plt.xticks 被调用。如果您的plt.boxplot 晚于plt.plot,则标签将通过箱线图设置,因此无需再次设置。
  • @JohanC 成功了,我应该自己回答我的问题吗?为了不被堆栈倒下
  • 供将来参考:如果您清理代码并提供一个最低限度的工作示例,这将真正有助于重现性。其中大部分与问题无关。

标签: python pandas numpy matplotlib


【解决方案1】:

默认情况下,boxplots 的索引从 1 开始。可以使用positions=... 更改此索引。或者您可以将lineplot 进一步启动一个位置。如果您在lineplot 之后调用boxplot,它将设置正确的刻度标签。

import numpy as np
import matplotlib.pyplot as plt

labels = ['C_r 03', 'C_r 05', 'C_r 0.1', 'C_r 0.2', 'C_r 0.5', 'C_r 1', 'C_r 2', 'Unconfined']

my_list = [np.random.uniform(10, 30, 5) for _ in labels]
my_mean = [values.mean() for values in my_list]

plt.plot(np.arange(len(my_mean)) + 1, my_mean, color='r')
plt.boxplot(my_list, labels=labels)
plt.show()

【讨论】:

    猜你喜欢
    • 2014-03-31
    • 2020-10-10
    • 1970-01-01
    • 1970-01-01
    • 2019-03-17
    • 1970-01-01
    • 1970-01-01
    • 2016-12-09
    • 2021-10-27
    相关资源
    最近更新 更多