python用matplotlib写出来的直方图很细如何解决


代码如下:

img

 这是我运行出来的结果:

img

这是别人电脑运行出来的结果:

img

为什么会出现这样的状况,该如何解决呢?

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7696461
  • 你也可以参考下这篇文章:python用matplotlib作图的时候,中文标注无法正常显示,乱码为小方框的解决办法
  • 除此之外, 这篇博客: Python利用Matplotlib画图并保存的过程中出现空白现象解释以及相应解决方案。中的 解决方案 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
    • 将保存savefig放在展示show前面:
    plt.savefig("examples.jpg")
    plt.show()
    
    • 画图的时候获取当前图像(这一点非常类似于 Matlab 的句柄的概念)
    import pandas as pd
    import matplotlib.pyplot as plt
    # Import Data
    df = pd.read_csv('https://github.com/selva86/datasets/raw/master/AirPassengers.csv')
    # Draw Plot
    plt.figure(figsize=(16,10), dpi= 80)
    plt.plot('date', 'value', data=df, color='tab:red')
    # Decoration
    plt.ylim(50, 750)
    xtick_location = df.index.tolist()[::12]
    xtick_labels = [x[-4:] for x in df.date.tolist()[::12]]
    plt.xticks(xtick_location, xtick_labels, rotation=0, fontsize=12, horizontalalignment='center', alpha=.7)
    plt.yticks(fontsize=12, alpha=.7)
    plt.title("Air Passengers Traffic (1949 - 1969)", fontsize=22)
    plt.grid(axis='both', alpha=.3)
    # Remove borders
    plt.gca().spines["top"].set_alpha(0.0)
    plt.gca().spines["bottom"].set_alpha(0.3)
    plt.gca().spines["right"].set_alpha(0.0)
    plt.gca().spines["left"].set_alpha(0.3)
    # plt.savefig("examples.jpg")
    fig = plt.gcf()
    plt.show()
    fig.savefig("examples.jpg")
    
  • 您还可以看一下 沈福利老师的Python数据可视化 Matplotlib实战 视频课程课程中的 散点图小节, 巩固相关知识点
  • 以下回答来自chatgpt:

    我可以为您解决Python中用Matplotlib画直方图的问题。

    要画直方图,你可以使用Matplotlib的plt.hist()函数。这个函数接受一个列表,每个值代表一个区间,然后自动计算该区间包含值的数量。

    下面是一个例子,展示如何使用plt.hist()函数:

    import matplotlib.pyplot as plt
    import random
    
    data = [random.randint(0, 10) for i in range(100)]
    
    plt.hist(data, bins=11, range=[0, 10], alpha=0.6, color='g')
    plt.title('Histogram')
    plt.xlabel('Value')
    plt.ylabel('Frequency')
    
    plt.show()
    

    这个例子生成一个包含100个随机数的列表,然后将这些数的直方图画出。

    你需要注意的是,你需要在画图之前导入Matplotlib库,并使用plt.show()方法在屏幕上显示图像。

    如果你遇到了细小的条形,你可以尝试增加bins参数的值,以使每个条形更宽:

    import matplotlib.pyplot as plt
    import random
    
    data = [random.randint(0, 10) for i in range(100)]
    
    plt.hist(data, bins=20, range=[0, 10], alpha=0.6, color='g')
    plt.title('Histogram')
    plt.xlabel('Value')
    plt.ylabel('Frequency')
    
    plt.show()
    

    你可以使用plt.title()、plt.xlabel()和plt.ylabel()函数来设置图表的标题和标签。你还可以使用plt.legend()函数来将每个数据系列的名称添加到图例中。

    如果你想在柱状图中显示数字,你可以使用plt.text()函数将文本添加到图表中:

    import matplotlib.pyplot as plt
    import random
    
    data = [random.randint(0, 10) for i in range(100)]
    
    plt.hist(data, bins=20, range=[0, 10], alpha=0.6, color='g')
    
    for i in range(11):
        y = data.count(i)
        if y > 0:
            plt.text(i, y, str(y), ha='center', va='bottom')
    
    plt.title('Histogram')
    plt.xlabel('Value')
    plt.ylabel('Frequency')
    
    plt.show()
    

    这个例子使用plt.text()函数将每个条形的值添加到图表中。每个条形的值表示为一个字符串,并使用位置参数i和y将其添加到正确的位置。

    你还可以使用plt.bar()函数来手动创建条形图。这需要一些额外的代码,但是让你更加精细地控制图表的外观。下面是一个使用plt.bar()函数的例子:

    import numpy as np
    import matplotlib.pyplot as plt
    import random
    
    data = [random.randint(0, 10) for i in range(100)]
    x = np.arange(11)
    
    plt.bar(x, [data.count(i) for i in x], width=0.8, align='center', alpha=0.6, color='g')
    
    for i, j in zip(x, [data.count(i) for i in x]):
        plt.text(i, j, str(j), ha='center', va='bottom')
    
    plt.title('Histogram')
    plt.xlabel('Value')
    plt.ylabel('Frequency')
    plt.xticks(x, x)
    
    plt.show()
    

    这个例子使用了NumPy库中的np.arange()函数创建了一个包含所有可能数值的数组,然后使用plt.xticks()函数将每个数值的标签添加到图表中。这个例子还使用了zip()函数将x轴坐标和对应的值组成元组,然后使用plt.text()函数将值添加到条形上方。

    这些例子应该能够帮助你绘制出满意的直方图。如果你还需要更多的帮助或者有任何问题,请告诉我。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^