Python使用Matpoltlib绘制折线图

48 阅读2分钟

引入依赖

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

显示中文和负号

plt.rcParams['font.family'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False

数据处理

df = pd.read_excel('movie_box_office.xlsx')

# 数据预处理
df_a = df[df['电影名称'] == '小美人鱼之大海怪传说']
df_a = df_a[['日期', '当前票房']]
df_a['当前票房'] = df_a['当前票房'].div(10000)
df_a = df_a.sort_values('日期', ascending=False)

df_b = df[df['电影名称'] == '威尼斯惊魂夜']
df_b = df_b[['日期', '当前票房']]
df_b['当前票房'] = df_b['当前票房'].div(10000)
df_b = df_b.sort_values('日期', ascending=False)

df_c = df[df['电影名称'] == '青木劫']
df_c = df_c[['日期', '当前票房']]
df_c['当前票房'] = df_c['当前票房'].div(10000)
df_c = df_c.sort_values('日期', ascending=False)

x = ['第' + str(i + 1) + '天' for i in range(20)]

绘制折线图

# 绘制折线图(多个数据系列)
plt.figure(figsize=(10, 6))
plt.plot(x, df_a[0:20]['当前票房'], '-', c='r', label='小美人鱼之大海怪传说')
plt.plot(x, df_b[0:20]['当前票房'], '-', c='y', label='威尼斯惊魂夜')
plt.plot(x, df_c[0:20]['当前票房'], '-', c='g', label='青木劫')

# 图表标题、y轴标题
plt.ylabel('单位(万元)')
plt.title('小美人鱼值大海怪传说、威尼斯惊魂夜、青木劫前20日票房走势')
plt.xticks(rotation=45)

# 文字标注
plt.annotate('最高点:' + str(round(df_a[0:20]['当前票房'].max(), 2)) + '万元',
             xy=(9, df_a[0:20]['当前票房'].max()),
             xytext=(9 + 1, df_a[0:20]['当前票房'].max()),
             arrowprops=dict(arrowstyle='->')
             )
plt.annotate('最高点:' + str(round(df_b[0:20]['当前票房'].max(), 2)) + '万元',
             xy=(10, df_b[0:20]['当前票房'].max()),
             xytext=(10 + 1, df_b[0:20]['当前票房'].max()),
             arrowprops=dict(arrowstyle='->')
             )
plt.annotate('最高点:' + str(round(df_c[0:20]['当前票房'].max(), 2)) + '万元',
             xy=(9, df_c[0:20]['当前票房'].max()),
             xytext=(9 + 1, df_c[0:20]['当前票房'].max()),
             arrowprops=dict(arrowstyle='->')
             )
# 设置图例位置
plt.legend(loc='center right')
# 设置y轴
plt.yticks(np.arange(0, 80, 20))
# 隐藏上、右轴线
plt.gca().spines['top'].set_color('none')
plt.gca().spines['right'].set_color('none')

plt.show()

效果图

Figure_1.png