python绘制组合图(柱状图和折线图)及图例显示问题解决

一、python绘制组合图(柱状图和折线图)的整体代码

# -*- coding: utf-8 -*-
"""
Created on Sun Oct  1 12:07:47 2023

@author: DELL
"""

#导入所需的库
import pandas as pd
import matplotlib.pyplot as plt

#使其可以显示中文字符
# 设置字体为宋体12号。
font = {'family': 'SimSun', 'size': 12}
plt.rc('font', **font)
plt.rcParams['axes.unicode_minus'] = False #解决负号无法正常显示问题

#导入所需要的数据
# 读取CSV文件
df = pd.read_csv('企业绘图数据.csv')
df1 = df.iloc[:, 1:]  # iloc用来按位置索引提取


#第一步绘制组织总量及其增长率变化图----------------------------------------
#A.计算总体数量的增长率
# 提取出企业总体数量并计算相关增长率
row1_num = df1.iloc[7]
row1_growth_rate = row1_num.pct_change() * 100.

# 创建绘图对象和子图对象
fig, ax1 = plt.subplots()

# 绘制柱状图并设置y轴属性
ax1.bar(row1_num.index, row1_num.values, color='white', edgecolor='black', hatch='/')
#ax1.errorbar(x, y, yerr=z, fmt='none', ecolor='red', capsize=3)#增加误差棒
ax1.tick_params(axis='y', labelcolor='blue')
ax1.set_ylabel('企业数量(个)', color='blue')

# 创建第二个子图并设置y轴属性
ax2 = ax1.twinx()
ax2.plot(row1_growth_rate.index, row1_growth_rate.values, color='black', marker='o')
ax2.tick_params(axis='y', labelcolor='red')
ax2.set_ylabel('增长率(%)', color='red')

# 设置横坐标标签
plt.xticks(range(len(df1.columns)), df1.columns)

# 调整布局
plt.tight_layout()
# 添加图例
plt.subplots_adjust(bottom=0.2)
line_legend = plt.Line2D([0], [0], color='red', marker='o', label='增长率(%)')  # 新增图例
bar_legend = plt.Rectangle((0, 0), 1, 1, color='skyblue', label='企业数量(个)')  # 新增图例
# 放置图例在下方中间位置
fig.legend(handles=[line_legend, bar_legend], loc='lower center', ncol=2, bbox_to_anchor=(0.5, 0.05))  # 添加图例


# 显示图形
plt.show()

二、可能遇到的一些问题及解决方案

(一)正负号及中文字符显示问题

加上一下代码即可-》
#使其可以显示中文字符
# 设置字体为宋体12号。
font = {'family': 'SimSun', 'size': 12}
plt.rc('font', **font)
plt.rcParams['axes.unicode_minus'] = False #解决负号无法正常显示问题

(二)图例放在图标靠中下面的位置显示不出的问题

         (1) 该问题主要是因为你将图例放在了你看不到的位置,也就是我们的绘图区域之外,用过修改bbox_to_anchor=(0.5, 0.05))参数进行调整位置即可。

fig.legend(handles=[line_legend, bar_legend], loc='lower center', ncol=2, bbox_to_anchor=(0.5, 0.05)) 

     (2)   如还是没有办法修改出,则采用增加绘图区域的方式进行解决:

   plt.subplots_adjust(bottom=0.2)是用来调整子图与画布底部之间的距离的函数。其中,bottom参数表示底部留白的比例。

        具体地说,bottom=0.2表示将底部留白的比例设置为整个画布高度的 20%。通过增加底部留白的空间,我们可以确保图例能够完全显示在画布中,避免被截断或遮挡。

        在上述代码中,我们使用了plt.subplots_adjust(bottom=0.2)来调整布局,以留出足够的空间来容纳图例的显示。你可以根据需要调整这个值来达到最佳的布局效果。如果图例仍然无法显示出来,可以尝试进一步增大这个值,例如bottom=0.3bottom=0.4

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

封印师请假去地球钓鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值