如何使用Matplotlib绘制基于State与Production列的直方图(Python)
如何用Matplotlib绘制以State为x轴、产量为y轴的双变量图表
嘿,我来帮你搞定这个问题!先聊聊你现有代码里的几个小问题,再给你两种贴合需求的实现方式~
先看原代码的问题
你的代码里有几个容易导致报错或者不符合需求的地方:
- 没正确导入Matplotlib:应该用
import matplotlib.pyplot as plt,你直接用plot.figure会找不到这个对象 - 错误使用了
hist()方法:hist()是用来展示连续变量的频率分布的,而你的x轴是离散的分类变量(State),用它没法实现你要的“每个State对应一个产量值”的效果 - 参数错误:
hist()里的bin应该写成bins,而且你也没正确传入x轴的变量
针对你的数据,最适合的实现方式
你的数据里每个State只有一个产量值,这种场景下用柱状图比直方图更贴合需求(直方图更适合有多个数据点的分布展示)。下面是具体代码:
步骤1:先构造你的DataFrame(方便复现)
import pandas as pd data = { 'State': ['AB', 'BS', 'TS'], 'Year': [2014, 2014, 2014], 'Area': [20000, 35000, 20000], 'production': [21674, 116074, 32678] } Pulse_yield = pd.DataFrame(data)
步骤2:用Matplotlib绘制柱状图
%matplotlib inline import matplotlib.pyplot as plt # 创建画布和轴对象 fig = plt.figure(figsize=(8, 6)) # 调整尺寸让图表更美观 ax = fig.gca() # 提取x和y轴数据 states = Pulse_yield['State'] production = Pulse_yield['production'] # 绘制柱状图 ax.bar(states, production, color='#1f77b4') # 可以自定义柱子颜色 # 设置图表标题和轴标签 ax.set_title('Yield in 2014', fontsize=14) ax.set_xlabel('States', fontsize=12) ax.set_ylabel('Production', fontsize=12) # 显示图表 plt.show()
如果你的数据有多个产量点(想画真正的双变量直方图)
如果之后你的数据里每个State有多个产量记录(比如多年份的数据),可以用Seaborn来绘制不同State的产量分布直方图,示例如下:
模拟多数据点的数据集
data_multi = { 'State': ['AB', 'AB', 'BS', 'BS', 'TS', 'TS'], 'Year': [2014, 2015, 2014, 2015, 2014, 2015], 'production': [21674, 23450, 116074, 120000, 32678, 35000] } df_multi = pd.DataFrame(data_multi)
用Seaborn绘制双变量直方图
import seaborn as sns plt.figure(figsize=(8, 6)) # 绘制分State的产量分布直方图,multiple='dodge'让柱子分开显示 sns.histplot(data=df_multi, x='production', hue='State', bins=10, multiple='dodge', palette='viridis') plt.title('Production Distribution by State', fontsize=14) plt.xlabel('Production', fontsize=12) plt.ylabel('Count of Records', fontsize=12) plt.show()
这样就能清晰看到不同State的产量分布情况啦~
内容的提问来源于stack exchange,提问作者suk15
相关产品推荐
相关产品推荐

