25个Python数据图表绘制技巧

目录

技巧1:基本折线图

技巧2:散点图矩阵(Pair Plot)

技巧3:柱状图的堆叠与分组

技巧4:箱线图

技巧5:热力图

技巧6:动态图表

技巧7:地图可视化

技巧8:3D图

技巧9:条形图旋转

技巧10:自定义颜色和样式

技巧11:次轴(Dual Axis)

技巧12:添加注释和箭头

技巧13:饼图分割

技巧14:使用Seaborn的风格

技巧15:交互式图表

技巧16:组合图表

技巧17:保存图表

技巧18:自定义图例

技巧19:动态数据更新

高级技巧与实践

技巧20:自定义颜色方案

技巧21:利用Seaborn的主题

技巧22:交互式滑块与控件

技巧23:高级图表:瀑布图

技巧24:高级注解技巧

技巧25:图表布局优化

文末福利


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用于添加文本注释,xyxytext指定位置,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()

解释:结合annotatetext函数,添加箭头和自由文本注释,指导观众注意关键点。


技巧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%免费】。

  • 25
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值