代码如下:
这是我运行出来的结果:
这是别人电脑运行出来的结果:
为什么会出现这样的状况,该如何解决呢?
不知道你这个问题是否已经解决, 如果还没有解决的话:plt.savefig("examples.jpg")
plt.show()
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画直方图的问题。
要画直方图,你可以使用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()函数将值添加到条形上方。
这些例子应该能够帮助你绘制出满意的直方图。如果你还需要更多的帮助或者有任何问题,请告诉我。