我想创建像here那样的图形,但在Python/中使用matplotlib或seaborn。我无法找到任何方法在一个图上同时获得水平和垂直胡须,也无法找到一种方法来调整盒子组件本身沿着X轴对应于不同数据的大小。
ntjbwcob1#
Matplotlib的boxplot有选项来设置箱线图的位置和宽度。箱形图的矩形位于第一个和第三个分位数之间;它们的差值用作宽度,而它们的平均值用作位置。(这与数据集的中位数和平均值不同)。下面的代码首先绘制具有调整宽度的水平箱线图。垂直箱线图绘制在顶部,但带有“框”。更改箱线图的参数允许进行更多的调整和微调。
boxplot
import matplotlib.pyplot as plt import seaborn as sns # only used to download the iris data set iris = sns.load_dataset('iris') categories = iris['species'].unique() colors = plt.cm.Set3.colors x_column, y_column = 'sepal_length', 'sepal_width' for cat, color in zip(categories, colors): # x-axis: sepal length x_data = iris[iris['species'] == cat][x_column] x_q1, x_q3 = np.percentile(x_data, [25, 75]) # y-axis: sepal width y_data = iris[iris['species'] == cat][y_column] y_q1, y_q3 = np.percentile(y_data, [25, 75]) plt.boxplot(x_data, positions=[(y_q3 + y_q1) / 2], widths=y_q3 - y_q1, vert=False, patch_artist=True, manage_ticks=False, boxprops={'facecolor': color, 'label': cat}) plt.boxplot(y_data, positions=[(x_q3 + x_q1) / 2], widths=x_q3 - x_q1, showbox=False, manage_ticks=False, boxprops={'facecolor': color, 'label': cat}) plt.xlabel(x_column) plt.ylabel(y_column) plt.legend() # uses the labels assigned to the boxes plt.tight_layout() plt.show()
字符串x1c 0d1x的数据
由于箱线图总是对称绘制,所以使用不是另一个方向q1和q3之间中点的中心线需要将中心框与箱线图本身分开绘制。q1和q3之间的距离仍然用于缩放晶须(其保持对称)。
import matplotlib.pyplot as plt import seaborn as sns iris = sns.load_dataset('iris') categories = iris['species'].unique() colors = plt.cm.Set3.colors x_column, y_column = 'sepal_length', 'sepal_width' for cat, color in zip(categories, colors): # x-axis: sepal length x_data = iris[iris['species'] == cat][x_column] x_q1, x_median, x_q3 = np.percentile(x_data, [25, 50, 75]) # y-axis: sepal width y_data = iris[iris['species'] == cat][y_column] y_q1, y_median, y_q3 = np.percentile(y_data, [25, 50, 75]) plt.boxplot(x_data, positions=[y_median], widths=y_q3 - y_q1, vert=False, showbox=False, manage_ticks=False) plt.boxplot(y_data, positions=[x_median], widths=x_q3 - x_q1, showbox=False, manage_ticks=False, boxprops={'facecolor': color, 'label': cat}) plt.gca().add_patch(plt.Rectangle((x_q1, y_q1), x_q3 - x_q1, y_q3 - y_q1, facecolor=color, edgecolor='black', label=cat)) plt.xlabel(x_column) plt.ylabel(y_column) plt.legend() plt.tight_layout() plt.show()
型
的
1条答案
按热度按时间ntjbwcob1#
使用matplotlib的boxplot命令
Matplotlib的
boxplot
有选项来设置箱线图的位置和宽度。箱形图的矩形位于第一个和第三个分位数之间;它们的差值用作宽度,而它们的平均值用作位置。(这与数据集的中位数和平均值不同)。下面的代码首先绘制具有调整宽度的水平箱线图。垂直箱线图绘制在顶部,但带有“框”。更改箱线图的参数允许进行更多的调整和微调。
字符串
x1c 0d1x的数据
通过其他轴的中线定位中心线
由于箱线图总是对称绘制,所以使用不是另一个方向q1和q3之间中点的中心线需要将中心框与箱线图本身分开绘制。q1和q3之间的距离仍然用于缩放晶须(其保持对称)。
型
的