趋势(一)利用python绘制折线图
折线图( Line Chart)简介
折线图用于在连续间隔或时间跨度上显示定量数值,最常用来显示趋势和关系(与其他折线组合起来)。折线图既能直观地显示数量随时间的变化趋势,也能展示两个变量的关系。
快速绘制
-
基于matplotlib
import matplotlib.pyplot as plt import numpy as np # 自定义数据 values = np.cumsum(np.random.randn(1000,1)) # 绘制折线图 plt.plot(values) plt.show()
-
基于seaborn
import seaborn as sns import matplotlib.pyplot as plt import numpy as np # 自定义数据 values = np.cumsum(np.random.randn(1000,1)) # 绘制折线图 sns.lineplot(x=np.array(range(1, 1001)), y=values.ravel()) # 使用 ravel() 将 values 转化为一维 plt.show()
-
基于plotly
import plotly.graph_objects as go import numpy as np # 自定义数据 values = np.cumsum(np.random.randn(1000,1)) # 绘制折线图 fig = go.Figure(data=go.Scatter(x=list(range(1, 1001)), y=values.ravel(), mode='lines')) fig.show()
-
基于pandas
import numpy as np import matplotlib.pyplot as plt import pandas as pd # 自定义数据 values = np.cumsum(np.random.randn(1000,1)) df = pd.DataFrame(values, columns=['Values']) # 绘制折线图 df.plot() plt.show()
定制多样化的折线图
自定义折线图一般是结合使用场景对相关参数进行修改,并辅以其他的绘图知识。参数信息可以通过官网进行查看,其他的绘图知识则更多来源于实战经验,大家不妨将接下来的绘图作为一种学习经验,以便于日后总结。
通过matplotlib绘制多样化的折线图
matplotlib主要利用plot
绘制折线图,可以通过matplotlib.pyplot.plot了解更多用法
-
修改参数
import matplotlib as mpl import matplotlib.pyplot as plt import numpy as np import pandas as pd plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签 # 自定义数据 df=pd.DataFrame({ 'x_values': range(1,11), 'y_values': np.random.randn(10) }) # 初始化布局 fig = plt.figure(figsize=(12,3)) # 自定义颜色 plt.subplot(1, 3, 1) plt.plot( 'x_values', 'y_values', data=df, color='skyblue') plt.title('自定义颜色') # 自定义透明度 plt.subplot(1, 3, 2) plt.plot( 'x_values', 'y_values', data=df, color='skyblue', alpha=0.3) plt.title('自定义透明度') # 自定义线条 plt.subplot(1, 3, 3) plt.plot( 'x_values', 'y_values', data=df, linestyle='dashed', linewidth=5) plt.title('自定义线条') plt.show()
-
带注释的折线图
import matplotlib.pyplot as plt import numpy as np import pandas as pd plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签 # 自定义数据 dates = [] for date in range(1970,2023): dates.append(str(date)) sample_size = 2023-1970 variable = np.random.normal(100, 15, sample_size, ) df = pd.DataFrame({ 'date': dates, 'value': variable}) # 初始化布局 fig = plt.figure(figsize=(12,8)) # 1-基本折线图 plt.subplot(2, 1, 1) plt.plot(df['date'], df['value']) # 轴标签 plt.xlabel('X-axis') plt.ylabel('Y-axis') plt.title('基本折线图') # 刻度 plt.xticks(rotation=45) # 2-带注释的折线图 plt.subplot(2, 1, 2) plt.plot(df['date'], df['value']) # 轴标签 plt.xlabel('X-axis') plt.ylabel('Y-axis') plt.title('带注释的折线图') # 刻度 plt.xticks(rotation=45) # 添加文本注释 plt.text(df['date'].iloc[38], # x位置 df['value'].iloc[1], # y位置 'What a nice chart!', # 文本注释 fontsize=13, color='red') # 找到最大值索引 highest_index = df['value'].idxmax() # 最高值标记 plt.scatter(df['date'].iloc[highest_index], df['value'].iloc[highest_index], color='blue', marker='o', # 标记特殊的店 s=100, ) # 计算均值 median_value = df['value'].median() # 添加均值线 plt.axhline(y=median_value, color='green', linestyle='--', label='Reference Line (Median)') fig.tight_layout() # 自动调整间距 plt.show()
-
对数变换的折线图
import matplotlib.pyplot as plt from matplotlib.ticker import MultipleLocator import numpy as np import pandas as pd plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签 # 自定义数据 x = np.linspace(1, 10, 100) y = np.exp(x) df = pd.DataFrame({ 'x': x, 'y': y}) # 初始化布局 fig = plt.figure(figsize=(12,4)) # 1-基本折线图 plt.subplot(1, 2, 1) plt.plot(df['x'], df['y']) # 轴标签 plt.xlabel('X-axis') plt.ylabel('Y-axis') plt.title('基本折线图') # 添加网格线 plt.grid(True, linestyle='--', alpha=0.6) # 2-对数转化折线图 plt.subplot(1, 2, 2) plt.<