matplotlib绘制横向柱状图,为什么柱状图显示在连接处,明明5个数据有6个柱状(语言-python)


# -*-coding:gb2312-*-
import matplotlib.pyplot as plt
import numpy as np

# 中文乱码问题
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
# 设置画布大小
plt.figure(figsize = (15,6),dpi = 60)

size=5
x = np.arange(size)
y1 = np.array([12,16,40,22,3])
y2 = np.array([8,16,40,21,11])
labels = np.array(["北京","上海","广州","深圳","杭州"])

plt.subplot(1,2,1)
plt.barh(x, y1, tick_label=labels, height=2, color='yellow')
for a,b in zip(y1, x):
    plt.text(a, b, b, ha='center')
# 标题
plt.title("套装一在热销城市的销量", fontsize=18)
plt.xlabel("销量", fontsize=10)
plt.ylabel('城市', fontsize=10)

plt.subplot(1,2,2)
plt.barh(x, y2, tick_label=labels, height=2, color='green')
plt.title("套装二在热销城市的销量", fontsize=18)
plt.xlabel("销量", fontsize=10)
for a,b in zip(y2, x):
    plt.text(a, b, b, ha='center')

plt.show()

img

  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7495612
  • 你也可以参考下这篇文章:matplotlib图片/子图标题置于底部 设置坐标轴位置 python
  • 除此之外, 这篇博客: matplotlib绘制出现坐标轴中文乱码的情况怎么处理?中的 用python绘制数据出现中文乱码的情况怎么处理? 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 通常我们绘制含有中文的exce数据l 就会出现乱码的情况,要将乱码的中文复现,只需要输入如下代码:

    plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
    plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号
    

    在这里插入图片描述
    以上图为例,我们看一下结果:

    import xlrd
    import matplotlib.pyplot as plt
    #调节字体
    plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
    shouyi= ["133", "111", "1145"]
    zhichu  = ["13", "56", "66"]
    data = ["7月10日", "7月11日", "7月12日"]
    
    fig, ax = plt.subplots()
    ax.plot(data, shouyi, label="收益")
    ax.plot(data, zhichu, label="支出")
    ax.legend()
    
    plt.show()
    

    在这里插入图片描述

  • 您还可以看一下 白勇老师的玩转Matplotlib数据绘图库课程中的 设置线形风格小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    根据参考资料和知识,解决问题的步骤如下:

    1. 首先,我们需要确认是否在使用 plt.plot 函数绘制柱状图时出现了问题。如果是的话,我们可以尝试使用 plt.bar 函数来绘制柱状图,该函数专门用于绘制柱状图。

    2. 如果问题不在于使用的函数,而是在数据上,我们需要检查数据的维度和格式,确保数据没有错误。可以使用 print 打印一下数据,观察是否符合预期。

    3. 如果数据没有问题,但仍然出现了多余的柱状图,请检查是否有多余的元素或重复的数据。可以使用 set 函数将数据转换为集合,然后再转换回列表,以去除重复的元素。

    下面是一个可能的解决方案:

    import matplotlib.pyplot as plt
    import random
    
    # 生成随机数据
    x = range(5)
    y = [random.randint(20, 35) for _ in range(5)]
    
    # 尝试使用 plt.bar 绘制柱状图
    plt.bar(x, y, color='plum')
    
    # 设置坐标轴标签和标题
    plt.xlabel('x')
    plt.ylabel('y')
    plt.title('柱状图')
    
    # 显示图例
    plt.legend(['柱状图'])
    
    # 显示网格线
    plt.grid(alpha=0.1)
    
    # 显示图形
    plt.show()
    

    如果以上解决方案不能解决问题,请确认是否存在其他代码或数据与之交互,或者提供更多细节和代码以便更好地帮助你解决问题。

python调试三板斧 https://ask.csdn.net/questions/7908322/54130133