【Python_绘图】堆积柱形图

本文介绍了如何使用Python Matplotlib库绘制数据堆积柱状图,展示了精确匹配、粗匹配和未匹配的定位方式在不同位置精度区间的分布情况。通过实例代码,展示了如何设置图例、调整字体、保存图片,并详细解释了关键代码部分。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

成图效果

堆积柱形图示例

 涉及内容

  • 数据堆积

#关键代码
y1 = (0,0,0,30.54,32.67,38.29,81.51)
y2 = (87.83,85.07,92.14,57.29,52.4,53.85,14.55)

d = []
for i in range(0, len(y2)):
    sum = y1[i] + y2[i]
    d.append(sum)
y3 = (12.17,14.93,7.86,12.17,14.93,7.86,3.94)
  • 横向底部图例

#关键代码
plt.legend((p1[0], p2[0], p3[0]), ('精确匹配', '粗匹配', '未匹配'),ncol=3,bbox_to_anchor=(0.5, -0.1), loc=8, borderaxespad=-3,frameon=False)
  • 图片显示不完整

#关键代码(通过保存解决)
fig.savefig('pipeilv.jpg',bbox_inches='tight')
  •  中文字体与英文字体

#关键代码(简便方法:折中找一个既像宋体,又像Times New Roman)
config = {
            "font.family": 'STSong',
            "font.size": 12,
            "mathtext.fontset": 'stix',
            "font.serif": ['STSong'],
         }
rcParams.update(config)

重要参考

Python 画简单堆叠柱状图 (数据可视化) - 程序员大本营 (pianshen.com)

完整代码

import numpy as np
import matplotlib.pyplot as plt
import matplotlib
from matplotlib import rcParams
config = {
            "font.family": 'STSong',
            "font.size": 12,
            "mathtext.fontset": 'stix',
            "font.serif": ['STSong'],
         }
rcParams.update(config)

fig=plt.figure(figsize=(8,4))#调整画布大小

N = 7
y1 = (15,17.22,19.63,30.24,34.49,40.84,70.5)
y2 = (17.14,14.26,15.71,25.08,22.85,23.61,23.5)

d = []
for i in range(0, len(y2)):
    sum = y1[i] + y2[i]
    d.append(sum)
y3 = (30.3,39.8,32.97,22.9,20,20.45,6)

d2 = []
for i in range(0, len(y2)):
    sum = y1[i] + y2[i] +y3[i]
    d2.append(sum)
y4=(28.36,19.82,24.49,12.98,12.94,10,0)

d3 = []
for i in range(0, len(y2)):
    sum = y1[i] + y2[i] +y3[i] +y4[i]
    d3.append(sum)
y5=(9.2,8.9,7.2,8.8,9.72,5.1,0)
# menStd = (2, 3, 4, 1, 2)
# womenStd = (3, 5, 2, 3, 3)
x = (1,2,3,4,5,6,7)  # the x locations for the groups
width = 0.35  # the width of the bars: can also be len(x) sequence

p1 = plt.barh(x, y1, width, color='#d62728')  # , yerr=menStd)
p2 = plt.barh(x, y2, width, left=y1)  # , yerr=womenStd)
p3 = plt.barh(x, y3, width, left=d)
p4=  plt.barh(x, y4, width, left=d2)
p5=  plt.barh(x, y5, width, left=d3,color='#7B7B7B')

plt.xlabel('位置精度区间分布(%)')
plt.ylabel('定位方式')
#plt.title('Scores by group and gender')
plt.yticks(x, ('百度 _G','腾讯 _G','高德 _G','百度  _S','腾讯  _S','高德  _S','所提方法'))
plt.xticks(np.arange(0, 110, 10))

plt.grid(which='major',axis='x',linestyle='dotted')

#plt.legend((p1[0], p2[0], p3[0],p4[0], p5[0]), ('[0,50 m]', '(50 m, 200 m]', '(200 m, 500 m]','(500 m, 1000 m]','(1000 m, ∞)'))
plt.legend((p1[0], p2[0], p3[0],p4[0], p5[0]), ('[0,50 m]', '(50 m, 200 m]', '(200 m, 500 m]','(500 m, 1000 m]','(1000 m, ∞)'),ncol=5,bbox_to_anchor=(0.5, -0.1), loc=8, borderaxespad=-3,frameon=False,handlelength=0.7)



plt.show()
fig.savefig('jingdu81.jpg',bbox_inches='tight')

### 使用 Matplotlib 和 Seaborn 实现堆积柱形图Python 中,可以利用 `Matplotlib` 或 `Seaborn` 来绘制堆积柱形图。以下是具体的实现方法和代码示例。 #### 方法一:基于 Matplotlib 的堆积柱形图 通过手动计算每组数据的位置并叠加绘图,可实现堆积效果。以下是一个完整的代码示例: ```python import matplotlib.pyplot as plt import numpy as np # 示例数据 labels = ['A', 'B', 'C', 'D'] data1 = [10, 20, 30, 40] data2 = [15, 25, 35, 45] x = np.arange(len(labels)) # 类别的位置 fig, ax = plt.subplots() # 绘制第一个系列的数据 ax.bar(x, data1, label='Series 1') # 在第一个系列的基础上叠加第二个系列 ax.bar(x, data2, bottom=data1, label='Series 2') # 添加标题、标签和其他细节 ax.set_ylabel('Scores') ax.set_title('Stacked Bar Chart Example') ax.set_xticks(x) ax.set_xticklabels(labels) ax.legend() plt.show() ``` 此代码展示了如何使用 `bottom` 参数指定每一层的起始高度[^1]。 --- #### 方法二:基于 Seaborn 的堆积柱形图 虽然 `Seaborn` 并未直接提供堆积柱形图的功能,但可以通过对其底层 `Matplotlib` 接口的操作间接实现。下面是一段结合 `pandas` 数据框处理的代码示例: ```python import seaborn as sns import pandas as pd import matplotlib.pyplot as plt # 构造数据 df = pd.DataFrame({ 'Category': ['A', 'A', 'B', 'B'], 'Group': ['X', 'Y', 'X', 'Y'], 'Value': [10, 15, 30, 35] }) # 转换为适合堆积柱形图的形式 pivot_df = df.pivot(index='Category', columns='Group', values='Value').fillna(0) # 绘制堆积柱形图 ax = pivot_df.plot(kind='bar', stacked=True, figsize=(8, 6)) # 设置图表属性 ax.set_xlabel('Categories') ax.set_ylabel('Values') ax.set_title('Stacked Bar Chart with Seaborn and Pandas') plt.show() ``` 这段代码中,先将数据转换成透视表形式以便于操作,再调用 `plot` 函数完成堆积柱形图的绘制[^2]。 --- #### 字体大小调整 如果希望进一步优化图表显示效果,比如调整字体大小,则可通过如下方式进行配置: ```python sns.set_context("notebook", font_scale=1.2) # 增大整体字体比例 plt.rc('font', size=14) # 控制全局字体大小 ``` 这一步骤有助于提升图表的视觉清晰度[^3]。 --- #### 进阶技巧:热图作为替代方案 当涉及多个维度或更复杂的分类关系时,考虑采用热图代替传统柱形图可能更为直观。例如,对于两维类别间的关系分析,可以直接应用 `heatmap` 函数: ```python import seaborn as sns # 示例数据 matrix_data = [[10, 20], [30, 40]] categories_x = ['Cat1', 'Cat2'] categories_y = ['Type1', 'Type2'] # 创建热图 sns.heatmap(matrix_data, annot=True, fmt="d", xticklabels=categories_x, yticklabels=categories_y, cmap="Blues") plt.title('Heatmap Representation of Categorical Relationships') plt.show() ``` 这种方法尤其适用于展示大量离散型变量之间的关联强度[^4]。 --- ### 总结 以上分别介绍了基于 `Matplotlib` 和 `Seaborn` 的两种堆积柱形图绘制方式,并提供了相应的代码实例供参考。此外还提及了一些辅助功能如字体调节以及高级场景下的热图表现手法。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值