我试图绘制一个像this这样的人口金字塔。然而,我不仅仅想要直方图,我还想要概率密度(密度之和应该是1)。当我使用matplotlib分别绘制它们时,这很容易。但是我无法使用类似的代码来获得人口金字塔。下面是我使用matplotlib绘制直方图的MWE-
import numpy as np
import matplotlib.pyplot as plt
X = np.arange(1000)
Y = np.arange(1100)
# Define the bin size and bins
bin_size = 150 # Adjust the bin size as needed
bins = np.arange(0, max(max(X), max(Y)) + bin_size, bin_size)
fig, axs = plt.subplots(2, 1, sharey=True, sharex=True)
# Plot the histogram for X
axs[0].hist(X, bins=bins, color='black', rwidth=0.7, density=True)
# Plot the histogram for Y
axs[1].hist(Y, bins=bins, color='darkgrey', rwidth=0.7, density=True)
# Set title and labels for each subplot
axs[0].set_title('Distribution of X')
axs[1].set_title('Distribution of Y')
axs[1].set_xlabel('Duration (s)') # Set xlabel only for the bottom subplot
axs[0].set_ylabel('Probability Density')
axs[1].set_ylabel('Probability Density')
# Set the y-axis to be logarithmic for each subplot
axs[0].set_yscale("log")
axs[1].set_yscale("log")
# Adjust spacing and show the plot
plt.tight_layout()
plt.show()
1条答案
按热度按时间flmtquvp1#
我建议使用
np.histogram
来计算概率密度。有了这些,你可以使用一个类似于问题中的代码来使用seaborn
绘制人口金字塔。下面是我的方法:这段代码产生以下结果: