5个最佳Python图表的例子(附零基础学习资料)

本文展示了使用Python绘制柱状图、折线图、饼图、散点图和热图的方法,提供了从数据可视化到实现复杂图形的指南。通过Python的Matplotlib和Seaborn库,用户可以轻松创建各种图表,包括柱状图展示分类数据、折线图显示时间序列数据、饼图展示比例、散点图描绘变量关系和热图表示多变量数据的相关性。

前言

任何试图从数据中发掘和传达见解的人都需要精通数据可视化。可视化对于机器学习过程中的每个分析阶段都至关重要。Python经常被用于绘制图形,因为它是该领域最重要的编程语言之一。因此,编程创建图形是当今一项非常普遍的任务。Python4Delphi的Matplotlib或Seaborn库使得解决(P4D)和制作最佳Python图形变得简单。因此,在这篇文章中,我们将使用[Python]提供的最好的[数据可视化工具]来看看5个顶级的Python图形例子。

需要Python零基础学习资料的伙伴,可以在公众号【码农资料库】中回复【py】自行领取 包括以下学习资料:

① Python所有方向的学习路线图,清楚各个方向要学什么东西

Python课程视频,涵盖必备基础、爬虫和数据分析

Python实战案例,学习不再是只会理论

Python电子好书,从入门到高阶应有尽有

⑤ 华为出品独家Python漫画教程,手机也能学习 ⑥ 历年互联网企业Python面试真题,复习时非常方便

在这里插入图片描述

什么是柱状图?

5 Examples Of Best Python Graphs - an image of a laptop showing a bar chart

柱状图是用来显示分类数据的。分类数据被显示为矩形条,其高度与它们在条形图中所代表的数值成正比。此外,它经常被用来比较各种数据类别的值,使用各种数据可视化工具Python。

什么是分类数据?

分类数据集无非是将数据归入各种逻辑类别,如高、中、矮等,对于一个人的身高数据来说。你必须弄清楚每个类别的数量,以创建一个条形图。

用户必须首先安装我们将使用的所有必要的库。Python的pip命令被用来完成这个任务。然后,导入这些包应该是你脚本的第一步。

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

让我们做一个有10个不同类别的数据集,并给每个类别一个值。

使用np.random.randn() 函数生成一个随机数组,将数组的大小、上界和下界作为参数传给它。

# create data
x = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']
y = np.random.randint(low=0, high=90, size=10)
print(y)

下面是程序的输出。

[47, 0, 27,  23, 42,  4, 46, 76, 33, 71]

如你所见,输出的y包含一个随机选择的数值数组。然后我们使用 plt.bar()函数传递两个参数x值和y值,在[Matplotlib]中绘制一个条形图。

# simple bar chart
plt.bar(x, y)
plt.xlabel("Categories")
plt.ylabel("Values")
plt.title("Bar plot of categories')
plt.show()

Matplotlib是一个强大的Python库,你可以在各种应用中使用它,它是许多其他Python库的基础。

什么是折线图?

5 Examples Of Best Python Graphs - an image of a laptop with a stacked line graph on the screen

被称为线段图的信息图将数据显示为一系列由直线段连接的数据点。

线形图是最常用的图表之一,它显示了一个或多个数据点随时间变化的方向。例如,在这个例子中,dateTime将是X轴,而测量的数量,如股票价格、天气、月销售额等,将在Y轴上。在显示任何时间序列数据时,线图通常是第一选择。

我们将首先导入制作折线图所需的软件包。这些导入与我们刚才看到的条形图的导入是一样的。

让我们用这个 np.linspace()函数来创建一个有50个1到100的值的数据集。这将出现在x轴上,而x的对数将出现在y轴上。

使用plt.plot,可以生成y对x的线图(x,y)。它将每一个点都连接成一条直线。

# simple line plot
x = np.linspace(1,100,5)
y = np.log(x)
plt.plot(x, y)
plt.xlabel('x')
plt.ylabel('logx')
plt.title('Basic line plot')
plt.xlim(0,100)
plt.ylim(0,5)plt.show()

如何在Python中创建一个饼图?

饼图根据饼所占的百分比来显示数据的分布。在做了必要的导入后,可以用Python中的plt.pie()命令来绘制饼图。

让我们看一个简单的例子。

import matplotlib.pyplot as plt
import numpy as np

y = np.array([45, 15, 25, 15])
labels = ["Peaches", "Bananas", "Cherries", "Apricots"]

plt.pie(y, labels=labels)
plt.show()

为什么散点图是最好的Python图形之一?

5 Examples Of Best Python Graphs - the Delphi VCL and Delphi FMX Python GUI library download page

你可以将两个数据集沿着两个轴绘制成图,以创建一个散点图。它有助于描述两个变量之间的关系。

如果y轴上的值随着x轴的上升(或下降)而出现上升,那么可能存在正(或负)的线性关系。相反,如果这些点是随机分布的,没有任何可识别的模式,这可能表明不存在依赖关系。

Python Matplotlib中的散点图可以使用 pyplot.plot()pyplot.scatter().借助于这些功能,你可以通过改变点的大小、颜色或形状来增强你的散点图。

因此,关于什么区别于 plt.scatter()plt.plot()的问题经常出现。用 pyplot.plot(),你应用的任何属性(颜色、形状或点的大小)都将应用于所有的点,而用 pyplot.scatter();你对每个点的外观有更多的控制。

换句话说,你可以用 plt.scatter()来使每个点(数据点的颜色,)的形状和大小取决于不同的变量–同一个变量,甚至是(y)。与此相反,你在使用时设置的属性 pyplot.plot()时设置的属性将被应用于图表中的每一个点。

这里需要使用我们之前为numpy、pandas和matplotlib做的同样的导入。首先,让我们用np.random.randint() 函数生成虚构的数据。你必须说明你需要多少个点的参数。此外,你可以指定所需的随机变量的下限和上限。

然后,使用Matplotlib的 plt.scatter()函数来创建一个散点图。变量x和y必须作为参数给出。

# simple scatterplot
x = range(50)
y = range(50) + np.random.randint(0, 30, 50)
plt.scatter(x, y)
plt.title('Basic scatter plot')
plt.xlabel('X value')
plt.ylabel('Y value')
plt.show()

什么是热图?它是否有资格成为最好的Python图表之一?

5 Examples Of Best Python Graphs - a screen with a collection of different Python graphs

用图形表示为列和行的矩阵的多变量数据被称为热图。当描述几个数字变量之间的相关性并显示模式和异常情况时,热图是一个非常有用的工具。

相关性是什么意思?

一个变量与其他变量的关系程度是由它的相关性来衡量的,这是一个无量纲单位。它衡量了变量的强度和方向之间的线性关系。它的值从0到1不等,代表强度,而+和-符号,代表方向。

下面的热图图中使用的数值是用NumPy随机生成的。虽然有许多可能的参数,但我们在这里将集中讨论基本图。

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

np.random.seed(0)
sns.set()
uniform_data = np.random.rand(10, 12)
ax = sns.heatmap(uniform_data, vmin=0, vmax=1)
plt.show()

Seaborn是一个用户友好的库,提供强大的工具来创建更好、更漂亮的可视化。此外,用户可以修改Seaborn图以满足个人需求,并可以使用Python为各种应用创建热图。

你能绘制这些最好的Python图表吗?

5 Examples Of Best Python Graphs - a person looking at a laptop held in their hands. The screen shows the Python4Delphi project page.

一套名为[Python for Delphi (P4D)]的免费组件将Python DLL整合到Delphi和Lazarus (FPC)。P4D使得运行Python脚本和开发新的Python模块和类型变得简单。例如,如果你已经有一个Python应用程序并需要创建图表,你可以使用Matplotlib库或将数据发送到Delphi并创建图表。你也可以用Matplotlib制作这个图表,然后在Delphi Windows GUI应用程序中显示。

你可以以多种不同的方式使用Python4Delphi,例如。

  • 围绕你现有的Python应用程序创建一个Windows GUI。
  • 将Python脚本添加到你的Delphi Windows应用程序中。
  • 通过Delphi线程为你的Python应用程序添加并行处理。
  • 用Delphi的函数增强你对速度敏感的Python应用程序,以提高速度。
<think> 我们使用Python实现动态交互图表时,通常会使用一些支持交互功能的库。目前比较流行的有: 1. Plotly:提供交互式图表,支持缩放、平移、悬停显示数据等。 2. Bokeh:也是一个强大的交互式可视化库,适合创建交互式的图表、仪表板。 3. Matplotlib:虽然本身是静态的,但结合一些工具(如mpld3)或使用其内置的交互模式(在Jupyter中)也能实现一定交互。 4. Altair:基于Vega和Vega-Lite,声明式统计可视化库,交互功能强大。 其中,Plotly和Bokeh是最为常用且功能强大的两个库。这里我将展示使用Plotly和Bokeh来实现动态交互图表例子。 ### 使用Plotly Plotly的Python库(plotly.py)可以创建丰富的交互式图表,并且支持在线和离线使用。 #### 示例:简单的折线图 ```python import plotly.express as px # 示例数据 df = px.data.gapminder().query("country=='Canada'") fig = px.line(df, x="year", y="lifeExp", title='加拿大预期寿命随时间变化') # 显示图表 fig.show() ``` #### 示例:带下拉菜单的交互 ```python import plotly.graph_objects as go import pandas as pd # 加载数据 df = px.data.gapminder() # 创建图形 fig = go.Figure() # 添加一个初始的轨迹(这里选择加拿大) canada_df = df[df['country'] == 'Canada'] fig.add_trace(go.Scatter(x=canada_df['year'], y=canada_df['lifeExp'], mode='lines+markers', name='加拿大')) # 设置下拉菜单按钮 buttons = [] for country in df['country'].unique()[:5]: # 只取前5个国家作为示例 country_df = df[df['country'] == country] buttons.append( dict(method='restyle', label=country, visible=True, args=[{'x': [country_df['year']], 'y': [country_df['lifeExp']], 'name': country}], ) ) # 更新布局,添加下拉菜单 fig.update_layout( updatemenus=[ dict( active=0, buttons=buttons, direction="down", pad={"r": 10, "t": 10}, showactive=True, x=0.1, xanchor="left", y=1.1, yanchor="top" ), ] ) # 设置标题 fig.update_layout(title_text="不同国家预期寿命随时间变化") fig.show() ``` ### 使用Bokeh Bokeh同样可以创建交互式图表,并且支持在Jupyter notebook中直接交互。 #### 示例:简单的折线图 ```python from bokeh.plotting import figure, show from bokeh.io import output_notebook output_notebook() # 在notebook中显示 # 示例数据 x = [1, 2, 3, 4, 5] y = [6, 7, 2, 4, 5] # 创建一个新图表 p = figure(title="简单折线图示例", x_axis_label='x', y_axis_label='y') # 添加折线 p.line(x, y, legend_label="Temp.", line_width=2) # 显示结果 show(p) ``` #### 示例:带交互式控件的图表 Bokeh支持添加小部件(widgets)来实现交互,例如滑块、下拉菜单等。我们可以将这些小部件与图表关联,通过回调函数更新图表。 ```python from bokeh.models import Slider, ColumnDataSource from bokeh.layouts import column from bokeh.plotting import figure, curdoc # 创建数据源 source = ColumnDataSource(data=dict(x=[1, 2, 3, 4, 5], y=[1, 2, 3, 4, 5])) # 创建图表 plot = figure(plot_width=400, plot_height=400) plot.line('x', 'y', source=source, line_width=3, line_alpha=0.6) # 创建滑块 slider = Slider(start=1, end=10, value=1, step=1, title="乘数") # 回调函数 def update_data(attrname, old, new): # 获取滑块当前值 k = slider.value # 更新y值 source.data = dict(x=[1,2,3,4,5], y=[i*k for i in [1,2,3,4,5]]) # 注册回调 slider.on_change('value', update_data) # 布局 layout = column(slider, plot) # 如果是使用Bokeh服务器,需要这样启动 # curdoc().add_root(layout) # 如果是在Jupyter notebook中,使用以下方式 from bokeh.io import show show(layout) ``` 注意:Bokeh的交互式控件在Bokeh服务器中运行效果最好,在Jupyter notebook中也可以运行,但某些高级交互可能需要服务器。 ### 总结 - Plotly 和 Bokeh 都是实现动态交互图表的优秀选择。 - Plotly 更加简单易用,尤其是使用 `plotly.express` 接口,可以快速创建交互式图表。 - Bokeh 提供了更底层的控制,可以构建复杂的交互式应用。 根据你的需求,选择适合的库。 §§相关问题§§: 1. 除了Plotly和Bokeh,还有哪些Python库可以实现动态交互图表? 2. 如何在网页中嵌入Plotly或Bokeh的交互图表? 3. Plotly和Bokeh在处理大数据集时性能如何? 4. 如何将Plotly图表保存为HTML文件? </think>在 Python 中实现动态交互图表最佳方式是使用 **Plotly** 和 **Dash** 组合,它们提供了丰富的交互功能和实时更新能力。以下是详细解决方案: ### 最佳解决方案:Plotly + Dash ```python import dash from dash import dcc, html, Input, Output import plotly.express as px import pandas as pd # 创建示例数据 df = pd.DataFrame({ 'Date': pd.date_range(start='2023-01-01', periods=30, freq='D'), 'Sales': [100, 120, 130, 125, 140, 160, 170, 155, 180, 200, 210, 190, 185, 220, 240, 230, 250, 270, 260, 280, 300, 290, 310, 330, 320, 340, 350, 360, 370, 380], 'Product': ['A']*10 + ['B']*10 + ['C']*10 }) # 创建Dash应用 app = dash.Dash(__name__) # 应用布局 app.layout = html.Div([ html.H1("销售数据分析仪表板", style={'textAlign': 'center'}), # 产品选择下拉菜单 dcc.Dropdown( id='product-selector', options=[ {'label': '所有产品', 'value': 'All'}, {'label': '产品 A', 'value': 'A'}, {'label': '产品 B', 'value': 'B'}, {'label': '产品 C', 'value': 'C'} ], value='All', style={'width': '50%', 'margin': '20px auto'} ), # 图表占位符 dcc.Graph(id='sales-chart'), # 动画滑块 dcc.Slider( id='animation-slider', min=5, max=30, step=5, value=15, marks={i: f'{i}天' for i in range(5, 31, 5)} ) ]) # 回调函数处理交互 @app.callback( Output('sales-chart', 'figure'), [Input('product-selector', 'value'), Input('animation-slider', 'value')] ) def update_chart(selected_product, days_to_show): # 筛选数据 filtered_df = df if selected_product == 'All' else df[df['Product'] == selected_product] filtered_df = filtered_df.tail(days_to_show) # 创建动态图表 fig = px.line( filtered_df, x='Date', y='Sales', color='Product', title=f"销售趋势: {'所有产品' if selected_product == 'All' else selected_product}", template='plotly_dark' ) # 添加动态效果 fig.update_layout( hovermode='x unified', transition_duration=500, xaxis=dict(rangeslider=dict(visible=True)) ) # 添加动画效果 fig.update_traces(line=dict(width=3, shape='spline')) return fig if __name__ == '__main__': app.run_server(debug=True) ``` ### 代码解释: 1. **数据准备**: - 创建包含日期、销售额和产品类别的示例数据集 - 使用Pandas DataFrame存储结构化数据 2. **Dash应用结构**: - `dcc.Dropdown`: 产品选择器,允许用户筛选特定产品 - `dcc.Graph`: 图表容器,显示交互式Plotly图表 - `dcc.Slider`: 控制显示数据时间范围的滑块 3. **交互逻辑**: - `@app.callback` 装饰器定义响应式更新 - 当用户选择不同产品或调整滑块时,自动更新图表 - 使用 `Input` 监听组件变化,`Output` 指定更新目标 4. **Plotly图表特性**: - `px.line()` 创建带渐变色的折线图 - `update_layout()` 添加悬停效果和范围滑块 - `transition_duration` 实现平滑的动画过渡 - `rangeslider` 提供时间轴缩放功能 ### 运行效果: 1. 运行应用后访问 `http://localhost:8050` 2. 交互功能包括: - 下拉菜单筛选产品 - 滑块控制显示天数 - 悬停显示详细数据 - 时间轴缩放 - 自动动画过渡 - 暗色主题支持 ### 替代方案比较: | 库/组合 | 优点 | 缺点 | |---------|------|------| | **Plotly+Dash** | 完整解决方案、企业级应用、丰富组件 | 学习曲线稍陡 | | **Streamlit** | 简单易用、快速原型 | 定制性较弱 | | **Bokeh** | 高度定制、高性能 | API较复杂 | | **Matplotlib** | 基础图表、广泛支持 | 交互性有限 |
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值