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


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

    1. # -*- coding: utf-8 -*-
    2. """
    3. Created on Sun Oct 1 12:07:47 2023
    4. @author: DELL
    5. """
    6. #导入所需的库
    7. import pandas as pd
    8. import matplotlib.pyplot as plt
    9. #使其可以显示中文字符
    10. # 设置字体为宋体12号。
    11. font = {'family': 'SimSun', 'size': 12}
    12. plt.rc('font', **font)
    13. plt.rcParams['axes.unicode_minus'] = False #解决负号无法正常显示问题
    14. #导入所需要的数据
    15. # 读取CSV文件
    16. df = pd.read_csv('企业绘图数据.csv')
    17. df1 = df.iloc[:, 1:] # iloc用来按位置索引提取
    18. #第一步绘制组织总量及其增长率变化图----------------------------------------
    19. #A.计算总体数量的增长率
    20. # 提取出企业总体数量并计算相关增长率
    21. row1_num = df1.iloc[7]
    22. row1_growth_rate = row1_num.pct_change() * 100.
    23. # 创建绘图对象和子图对象
    24. fig, ax1 = plt.subplots()
    25. # 绘制柱状图并设置y轴属性
    26. ax1.bar(row1_num.index, row1_num.values, color='white', edgecolor='black', hatch='/')
    27. #ax1.errorbar(x, y, yerr=z, fmt='none', ecolor='red', capsize=3)#增加误差棒
    28. ax1.tick_params(axis='y', labelcolor='blue')
    29. ax1.set_ylabel('企业数量(个)', color='blue')
    30. # 创建第二个子图并设置y轴属性
    31. ax2 = ax1.twinx()
    32. ax2.plot(row1_growth_rate.index, row1_growth_rate.values, color='black', marker='o')
    33. ax2.tick_params(axis='y', labelcolor='red')
    34. ax2.set_ylabel('增长率(%)', color='red')
    35. # 设置横坐标标签
    36. plt.xticks(range(len(df1.columns)), df1.columns)
    37. # 调整布局
    38. plt.tight_layout()
    39. # 添加图例
    40. plt.subplots_adjust(bottom=0.2)
    41. line_legend = plt.Line2D([0], [0], color='red', marker='o', label='增长率(%)') # 新增图例
    42. bar_legend = plt.Rectangle((0, 0), 1, 1, color='skyblue', label='企业数量(个)') # 新增图例
    43. # 放置图例在下方中间位置
    44. fig.legend(handles=[line_legend, bar_legend], loc='lower center', ncol=2, bbox_to_anchor=(0.5, 0.05)) # 添加图例
    45. # 显示图形
    46. plt.show()

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

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

    1. 加上一下代码即可-》
    2. #使其可以显示中文字符
    3. # 设置字体为宋体12号。
    4. font = {'family': 'SimSun', 'size': 12}
    5. plt.rc('font', **font)
    6. 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

  • 相关阅读:
    .NET Framework中自带的泛型委托Action
    Leetcode238. 除自身以外数组的乘积
    商城免费搭建之java商城 开源java电子商务Spring Cloud+Spring Boot+mybatis+MQ+VR全景+b2b2c
    【数据结构】串的基础知识及代码实现
    net-java-php-python-大学生互助旅游网站修改计算机毕业设计程序
    第2-4-5章 规则引擎Drools高级语法-业务规则管理系统-组件化-中台
    DOM破坏绕过XSSfilter例题
    Unity 数字字符串逗号千分位
    云安全【阿里云ECS攻防】
    Eureka Series : USB / UART / TTL / 232 / 485 Debuger
  • 原文地址:https://blog.csdn.net/weixin_63253486/article/details/133462596