Matplotlib - 绘制一维范围线并在其上散点

Matplotlib - Plot 1D range line and scatter points on it

任何重现这种图表的建议?

我正在尝试仅重现通用箱线图的胡须。垂直线表示特定范围,我会在其上绘制点以突出显示哪些点在内部或外部。 我的困难是绘制这些一维范围线的极值边界。 谢谢

这称为箱线图 (matplotlib)。如果您只想要一行,您可以更改参数中的一个选项 (widths)。如果您只想要一条线,请将其设置为 0。一个问题是上限也将其宽度更改为零。您可以通过将 caps xdata 参数设置为某个值(例如 -0.1 到 0.1)来解决此问题。

您可以使用 plt.scatter() 添加数据点。

希望对您有所帮助。

此处的代码示例:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# set some random data
data = np.array([20,16,14,1,2,3,4,4.5,7.7,5,6,7,8,9,5,1.1])
x = np.array([1]*len(data))
df = pd.DataFrame(data)

# create boxplot with 0 widths (just a line)
bp = plt.boxplot(df, widths=0)

# change caps width
for cap in bp['caps']:
    cap.set(xdata=cap.get_xdata() + (-.1,.1))

# get upper and lower cap value
lb = bp['caps'][0].get_ydata()[0]
ub = bp['caps'][1].get_ydata()[0]

# add scatter plot
plt.scatter(x[(data < lb) | (data > ub)], data[(data < lb) | (data > ub)], color='red')
plt.scatter(x[(data>=lb) & (data<= ub)], data[(data>=lb) & (data<= ub)], color='green')
plt.show()

结果: