Matplotlib is hiring a Research Software Engineering Fellow! See discourse for details. Apply by January 3, 2020

Version 3.1.1
matplotlib
Fork me on GitHub

目录

Related Topics

并排生成多个柱状图

此示例沿分类X轴绘制不同样本的水平柱状图。此外,柱状图是绘制对称的关于他们的X位置,从而使他们非常类似小提琴图。

要制作这种高度专业化的绘图,我们不能使用标准 hist 方法。相反,我们使用 barh 直接绘制水平条。钢筋的垂直位置和长度通过 np.histogram 功能。所有样本的柱状图使用相同的范围(最小值和最大值)和箱数计算,以便每个样本的箱位于相同的垂直位置。

选择不同的仓位计数和大小会显著影响直方图的形状。Astropy文档有一个关于如何选择这些参数的重要部分:http://docs.astropy.org/en/stable/visualization/histogram.html

并排生成多个柱状图
import numpy as np
import matplotlib.pyplot as plt

np.random.seed(19680801)
number_of_bins = 20

# An example of three data sets to compare
number_of_data_points = 387
labels = ["A", "B", "C"]
data_sets = [np.random.normal(0, 1, number_of_data_points),
             np.random.normal(6, 1, number_of_data_points),
             np.random.normal(-3, 1, number_of_data_points)]

# Computed quantities to aid plotting
hist_range = (np.min(data_sets), np.max(data_sets))
binned_data_sets = [
    np.histogram(d, range=hist_range, bins=number_of_bins)[0]
    for d in data_sets
]
binned_maximums = np.max(binned_data_sets, axis=1)
x_locations = np.arange(0, sum(binned_maximums), np.max(binned_maximums))

# The bin_edges are the same for all of the histograms
bin_edges = np.linspace(hist_range[0], hist_range[1], number_of_bins + 1)
centers = 0.5 * (bin_edges + np.roll(bin_edges, 1))[:-1]
heights = np.diff(bin_edges)

# Cycle through and plot each histogram
fig, ax = plt.subplots()
for x_loc, binned_data in zip(x_locations, binned_data_sets):
    lefts = x_loc - 0.5 * binned_data
    ax.barh(centers, binned_data, height=heights, left=lefts)

ax.set_xticks(x_locations)
ax.set_xticklabels(labels)

ax.set_ylabel("Data values")
ax.set_xlabel("Data sets")

plt.show()