目录
Python凭借其强大的库如Matplotlib、Seaborn、Plotly等,成为了不可或缺的工具。今天,我们将探索27个实用的Python数据图表绘制技巧,帮助你从基础图表制作到创建令人印象深刻的高级可视化。
如果你对Python感兴趣的话,可以试试我整理的这一份全套的Python学习资料,【点击这里】免费领取
技巧1:基本折线图
-
功能:展示数据随时间变化的趋势。
-
示例代码 :
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
y = np.sin(x)
plt.plot(x, y)
plt.title('Sine Wave')
plt.xlabel('X-axis')
plt.ylabel('Sin(X)')
plt.show()
解释:linspace
用于生成等间距的数组,plot
函数绘制折线图,标签和标题让图表更易理解。
技巧2:散点图矩阵(Pair Plot)
-
功能:展示多变量之间的关系。
-
示例代码(使用Seaborn):
import seaborn as sns
import pandas as pd
# 假设df是一个DataFrame
df = sns.load_dataset("iris") # 使用内置数据集
sns.pairplot(df, hue="species")
plt.show()
解释:pairplot
根据不同的变量绘制散点图矩阵,hue
参数按类别着色,便于观察分类变量间的关系。
技巧3:柱状图的堆叠与分组
-
功能:展示分类数据的组成或比较。
-
示例代码 :
categories = ['A', 'B', 'C']
data1 = [20, 35, 30]
data2 = [25, 30, 35]
plt.bar(categories, data1, label='Series 1')
plt.bar(categories, data2, bottom=data1, label='Series 2')
plt.legend()
plt.show()
解释:两个bar
函数调用,第二个使用bottom
参数实现堆叠效果。
技巧4:箱线图
-
功能:显示一组数据的分布情况,包括中位数、四分位数等。
-
示例代码 :
sns.boxplot(y="species", x="sepal_length", data=df)
plt.title('Iris Dataset Boxplot')
plt.show()
解释:箱线图用于可视化分类数据在连续变量上的分布差异。
技巧5:热力图
-
功能:展示数据矩阵的相关性或强度。
-
示例代码 :
corr_matrix = df.corr() # 计算相关系数矩阵
sns.heatmap(corr_matrix, annot=True, cmap='coolwarm')
plt.show()
解释:heatmap
通过颜色强度表示数据间的相关性,annot=True
添加数值注释。
技巧6:动态图表
-
功能:展示随时间变化的数据。
-
示例代码(使用Plotly):
import plotly.express as px
fig = px.line(df, x='petal_length', y='sepal_width', color='species', title='Dynamic Plot')
fig.show()
解释:Plotly支持交互式图表,适合展示动态数据。
技巧7:地图可视化
-
功能:地理位置数据的可视化。
-
示例代码(使用Geopandas和Plotly):
# 假设gdf是地理DataFrame
fig = px.choropleth(gdf, geojson=gdf.geometry, locations=gdf.index, color='some_column')
fig.update_geos(fitbounds="locations", visible=False)
fig.show()
解释:地理信息可视化,需地理编码数据。
技巧8:3D图
-
功能:三维数据的可视化。
-
示例代码 :
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(df['sepal_length'], df['sepal_width'], df['petal_length'], c=df['species'].map({'setosa': 'r', 'versicolor': 'g', 'virginica': 'b'}))
ax.set_xlabel('Sepal Length')
ax.set_ylabel('Sepal Width')
ax.set_zlabel('Petal Length')
plt.show()
解释:利用projection='3d'
创建三维坐标轴,展示多维度数据。
技巧9:条形图旋转
-
功能:改变条形图的方向,便于阅读。
-
示例代码 :
plt.barh(categories, data1)
plt.xlabel('Values')
plt.ylabel('Categories')
plt.title('Horizontal Bar Chart')
plt.show()
解释:使用barh
函数绘制水平条形图。
【文末有惊喜福利🎁】
技巧10:自定义颜色和样式
-
功能:增强图表的视觉效果。
-
示例代码 :
plt.plot(x, y, color='skyblue', linestyle='--', linewidth=2, marker='o', markersize=10)
解释:通过参数控制线条颜色、风格、宽度及标记。
技巧11:次轴(Dual Axis)
-
功能:同时展示两个不同尺度的数据。
-
示例代码 :
fig, ax1 = plt.subplots()
color = 'tab:blue'
ax1.set_xlabel('X-axis')
ax1.set_ylabel('Y1', color=color)
ax1.plot(x, y, color=color)
ax1.tick_params(axis='y', labelcolor=color)
ax2 = ax1.twinx()
color = 'tab:red'
ax2.set_ylabel('Y2', color=color)
ax2.plot(x, y**2, color=color)
ax2.tick_params(axis='y', labelcolor=color)
fig.tight_layout()
plt.show()
解释:使用twinx()
创建共享同一X轴的次Y轴。
技巧12:添加注释和箭头
-
功能 : 强调图表中的特定点或趋势。
-
示例代码 :
plt.annotate('Peak', xy=(2, 1), xytext=(3, 1.5),
arrowprops=dict(facecolor='black', shrink=0.05))
plt.plot(x, y)
plt.show()
解释:annotate
用于添加文本注释,xy
和xytext
指定位置,arrowprops
添加箭头。
技巧13:饼图分割
-
功能:展示部分占整体的比例。
-
示例代码 :
sizes = [15, 30, 45, 10]
labels = 'Frogs', 'Hogs', 'Dogs', 'Logs'
plt.pie(sizes, labels=labels, autopct='%1.1f%%', startangle=140)
plt.axis('equal') # Equal aspect ratio ensures that pie is drawn as a circle.
plt.show()
解释:autopct
格式化百分比,axis('equal')
保持饼图圆形。
技巧14:使用Seaborn的风格
-
功能:快速美化图表。
-
示例代码 :
sns.set(style="whitegrid")
sns.lineplot(data=df, x="sepal_length", y="sepal_width", hue="species")
plt.show()
解释:sns.set(style="...")
改变全局图表风格,提升视觉效果。
技巧15:交互式图表
-
功能:允许用户与图表互动。
-
示例代码(使用Plotly Dash):
import dash
import dash_core_components as dcc
import dash_html_components as html
import plotly.express as px
app = dash.Dash()
df = px.data.iris()
app.layout = html.Div([
dcc.Graph(
id='example-graph',
figure=px.scatter(df, x='sepal_width', y='sepal_length', color='species')
)
])
if __name__ == '__main__':
app.run_server(debug=True)
解释:Dash框架允许创建复杂的交互式图表应用。
技巧16:组合图表
-
功能:在一个图表上展示多种类型的数据。
-
示例代码 :
plt.subplot(2, 1, 1)
plt.plot(x, y, 'r')
plt.subplot(2, 1, 2)
plt.plot(x, -y, 'g')
plt.show()
解释:subplot
创建子图布局,展示不同类型数据。
技巧17:保存图表
-
功能:将图表保存为文件。
-
示例代码 :
plt.savefig('my_plot.png', dpi=300, bbox_inches='tight')
解释:savefig
保存当前图像,dpi
控制分辨率,bbox_inches='tight'
去除空白边框。
技巧18:自定义图例
-
功能:精确控制图例的位置和外观。
-
示例代码 :
plt.legend(handles=handles, labels=labels, loc='upper center', bbox_to_anchor=(0.5, -0.1), fancybox=True, shadow=True, ncol=2)
解释:legend
函数控制图例,loc
定位,bbox_to_anchor
精确调整位置。
技巧19:动态数据更新
-
功能:适用于实时数据分析。
-
示例代码(基于matplotlib动画):
import matplotlib.animation as animation
def animate(i):
data = ... # 更新数据逻辑
line.set_data(x, data[i])
return line,
fig, ax = plt.subplots()
line, = ax.plot([], [])
ani = animation.FuncAnimation(fig, animate, frames=len(data), interval=200)
plt.show()
解释:使用matplotlib的动画功能更新图表内容。
【文末有惊喜福利🎁】
高级技巧与实践
技巧20:自定义颜色方案
-
功能:通过自定义颜色映射增强图表的美学。
-
示例代码(使用颜色映射):
import matplotlib.colors as mcolors
cmap = mcolors.LinearSegmentedColormap.from_list("", ["blue","red"])
sns.heatmap(corr_matrix, annot=True, cmap=cmap)
plt.show()
解释:创建自定义颜色映射,以反映数据的不同级别或类别。
技巧21:利用Seaborn的主题
-
功能:快速改变图表的整体风格,使之更专业。
-
示例代码 :
sns.set_theme(style="darkgrid")
sns.lineplot(data=df, x="time", y="value", hue="variable", palette="muted")
解释:set_theme
函数可以设置不同的主题,如“whitegrid”、“dark”等,以适应不同的报告或出版物需求。
技巧22:交互式滑块与控件
-
功能:在Jupyter Notebook中增加交互性,允许用户探索不同参数下的图表变化。
-
示例代码(使用IPython widgets):
from ipywidgets import interact
@interact
def plot_data(n_points=100):
x = np.random.rand(n_points)
y = np.random.rand(n_points)
plt.scatter(x, y)
plt.title(f'Number of Points: {n_points}')
plt.show()
解释:使用交互函数允许用户通过滑块或下拉菜单动态改变图表参数。
技巧23:高级图表:瀑布图
-
功能:展示累计效果,常用于财务分析。
-
示例代码(自定义实现):
def waterfall_chart(values, labels):
cumsum = np.cumsum(values)
plt.bar(labels, cumsum[1:], cumsum[:-1], align='center')
plt.show()
values = [100, -50, 30, -10, 20]
labels = ['Start', 'Expense 1', 'Income', 'Expense 2', 'Adjustment']
waterfall_chart(values, labels)
解释:通过叠加条形图创建瀑布效果,展示最终值与初始值之间的变化。
技巧24:高级注解技巧
-
功能:利用箭头和文本增强图表的解释性。
-
示例代码(复杂注解):
plt.plot(x, y)
plt.annotate('Local max', xy=(2, 1), xytext=(3, 1.5),
arrowprops=dict(arrowstyle='->'))
plt.text(4, 0.6, "Some Text", fontsize=12)
plt.show()
解释:结合annotate
和text
函数,添加箭头和自由文本注释,指导观众注意关键点。
技巧25:图表布局优化
-
功能:在有限的空间内有效展示多个图表。
-
示例代码(使用
subplots
):
fig, axs = plt.subplots(2, 2, figsize=(10, 8))
for i in range(2):
for j in range(2):
axs[i, j].plot(x, y)
plt.tight_layout()
plt.show()
解释:通过二维数组定义子图,tight_layout
自动调整子图间距,避免重叠。
好了,今天的分享就到这里了,我们下期见。如果本文对你有帮助,请动动你可爱的小手指点赞、收藏吧!
文末福利
如果你对Python感兴趣的话,可以试试我整理的这一份全套的Python学习资料,【点击这里】免费领取!
包括:Python激活码+安装包、Python
web开发,Python爬虫,Python数据分析,人工智能、自动化办公等学习教程。带你从零基础系统性的学好Python!
① Python所有方向的学习路线图,清楚各个方向要学什么东西
② 100多节Python课程视频,涵盖必备基础、爬虫和数据分析
③ 100多个Python实战案例,学习不再是只会理论
④ 华为出品独家Python漫画教程,手机也能学习
也可以微信扫描下方二维码都可以免费获取【保证100%免费】。