在本文中,您将逐步学习Matplotlib Python数据可视化库。不论您是完全的初学者,还是希望提高技能,这篇指南都为您量身定制,不需要任何先前的知识。到本文结束时,您将对这个强大的库有全面的理解。
继续阅读吧!
现在,将Matplotlib库导入您的jupyter notebook。
import matplotlib
import matplotlib.pyplot as plt
# 打印版本
print(matplotlib.__version__)
# Output > 3.7.1
让我们创建您的第一个图表。
plt.plot();
恭喜您完成了第一个图表!现在,让我们深入一些细节,帮助您理解这个空图表背后发生的事情。
请看下面的图片,它展示了Matplotlib图表的结构组成。
需要记住的两个关键点:
Figure:Figure 是包含您绘制的所有内容的主要窗口或页面,查看下面的示例以更好地理解。
plt.plot()
Axes:在这个 Figure 中,您可以添加 Axes。Axes 定义了您指定要绘制数据点的区域。请参阅下面的图片以获取视觉指南。
number_one = [1, 2, 3, 4, 5, 6, 7, 8, 9]
number_two = [10, 20, 30, 40, 50, 60, 70, 80, 90]
# 绘制图形
plt.plot(number_one, number_two);
# 给axes添加label
plt.xlabel('X-axis Label');
plt.ylabel('Y-axis Label');
请记住——每个图表都包括两个轴:X轴和Y轴。在上面的示例中:
X轴表示 “number_one” Y轴表示 “number_two”
# 1. import库
import matplotlib.pyplot as plt
# 2. 设置可视化数据
first_number = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
secound_number = [11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22]
# 3. 绘图设置
fig, ax = plt.subplots(figsize=(6,6))
# 4. 绘图
ax.plot(first_number, secound_number)
# 5. 设置标题,xlabel和ylabel
ax.set(title="This is my numbers plot", xlabel="x-axis", ylabel="y-axis")
# 6. 保存图形
fig.savefig("sample_data")
现在,您已成功创建了标题为“This is my numbers plot”的图表。接下来,深入了解构建此图表所用代码的含义。我们将逐步分解每一段代码。
import matplotlib.pyplot as plt
在使用Matplotlib库时,第一步是将其导入到notebook。命令是:
import matplotlib
我们理解以下代码:
.pyplot as plt
Pyplot 是 Matplotlib 库中的一个函数。Matplotlib 是一个用于 Python 的 2D 数据可视化库。这个库是由 John D. Hunter 创建的。Matplotlib 旨在提供类似于 Matlab 的接口。这个库的主要优点之一是它是免费和开源的,这意味着任何人都可以使用和实现这个库。
subplot()
是 Matplotlib 中的一个函数,用于在一个图形中创建多个子图。此外,figsize()
是 Matplotlib 中的方法,您可以通过传递参数来指定图形(或图表)的大小。请参阅下面的代码示例,以便更好地理解。
import numpy as np
# 随机采集股票价格数据
days = np.arange(1, 11)
stock_price_A = np.random.rand(10) * 10 + 50 # 随机生成股票A的价格
stock_price_B = np.random.rand(10) * 8 + 45 # 随机生成股票B的价格
# 构建subplots
fig, axs = plt.subplots(2, 1, figsize=(10, 8))
# 绘制第一个图形区域
axs[0].plot(days, stock_price_A, label='Stock A', marker='o', color='blue')
axs[0].set_title('Stock Price of A')
axs[0].set_xlabel('Days')
axs[0].set_ylabel('Price')
axs[0].legend()
# 绘制第二个图形区域
axs[1].plot(days, stock_price_B, label='Stock B', marker='s', color='green')
axs[1].set_title('Stock Price of B')
axs[1].set_xlabel('Days')
axs[1].set_ylabel('Price')
axs[1].legend()
# 调整布局以获得更好的间距
plt.tight_layout()
# 显示图形
plt.show()
Matplotlib 是建立在 NumPy 数组之上的。因此,在本节中,我们将学习使用 NumPy 数组进行绘图的最常见类型。在本节中,我将涵盖以下主题。
Line(线图) Scatter(散点图) Bar(条形图) Histogram(直方图) Pie(饼图) **Subplots()**(子图)
首先导入 NumPy 库:
import numpy as np
但在学习图表之前,了解 Matplotlib标记的概念是至关重要的。这将帮助您更好地理解 Matplotlib 库中的每种图表。
Matplotlib Marker(标记)
point_y = np.array([2, 8, 4, 12])
plt.plot(point_y, marker = 'o')
plt.show()
标记作为图表中的视觉指示器,使您能够突出显示特定的兴趣点。在以下示例中,我标记了点 2、4、8、12。请参阅上面的图片以获得更清晰的可视化。要在图表中标记点,您可以使用 marker
关键字。
point_y = np.array([2, 8, 4, 12])
plt.plot(point_y, marker = '*');
画红色线:
point_y = np.array([2, 8, 4, 10])
plt.plot(point_y, 'ro-') # o is a mareker and r is a red
plt.show()
画绿色虚线:
point_y = np.array([2, 8, 4, 10])
plt.plot(point_y, 'o:g')
plt.show()
以下是 Marker 中的一些颜色参考:
‘r’ — Red🔴 ‘g’ — Green 🟢 ‘b’ — Blue🔵 ‘y’ — Yellow 🟡 ‘k’ — Black ⚫
改变标记的大小
point_y = np.array([3, 8, 1, 10])
plt.plot(point_y, marker = 'o', ms = 21) # ms是标记大小(Markersize)的简称
plt.show()
修改绿色线标记大小:
point_y = np.array([2, 8, 4, 10])
plt.plot(point_y, 'o:g', ms = 21)
plt.show()
绘制标记的边缘:
point_y = np.array([2, 6, 1, 10])
plt.plot(point_y, marker = 'o', ms = 20, mec = 'r')
plt.show()
理解下面代码的参数含义:
plt.plot(point_y, marker = 'o', ms = 20, mec = 'r')
marker
:用于在图表上标记点的符号,例如圆形、方形或三角形。ms
:标记的大小,决定标记符号的尺寸。在此示例中,我使用了大小为 20 的标记。mec(mark edge color)
:标记轮廓的颜色。缩写mec
代表“标记边缘颜色”。在上面的示例中,我使用了红色作为标记的边缘颜色。
如何使用 Matplotlib 创建折线图
在本节中,您将学习如何使用 Matplotlib 创建令人印象深刻的折线图。
point_y = np.array([2, 8, 4, 10])
plt.plot(point_y, linestyle = 'dotted')
plt.show()
解释下面代码的参数含义:
plt.plot(point_y, linestyle = 'dotted')
Matplotlib 中的 linestyle
帮助您调整折线图的外观。您可以使用完整的单词 linestyle
或缩写 ls
。有多种样式,如实线、虚线和点线。例如,如果您想要一条点线,可以将 linestyle
设置为 'dotted'
,或者使用 ls='dotted'
。这一切都是为了自定义线条的外观!
point_y = np.array([2, 8, 4, 10])
plt.plot(point_y, ls = 'dotted') # 使用ls
plt.show()
改变不同的虚线风格:
point_y = np.array([2, 8, 4, 10])
plt.plot(point_y, ls = 'dashed') # i use dashed style
plt.show()
point_y = np.array([2, 8, 4, 10])
plt.plot(point_y, ls = 'dashdot') # i use dashdot style
plt.show()
如何使用 Matplotlib 修改折线图颜色
让我们通过下面的代码示例来了解如何在 Matplotlib 中自定义线条颜色。
point_y = np.array([2, 8, 4, 10])
plt.plot(point_y, color = 'g')
plt.show()
理解下面代码的参数含义:
plt.plot(point_y, color = 'g')
color
是 Matplotlib 中的一个关键字,用于设置线条颜色。color
的缩写是 c
。您可以使用 color
或 c
,两者效果相同。请参阅下面的示例!
point_y = np.array([2, 8, 4, 10])
plt.plot(point_y, c = 'g') # this time i use c keyword
plt.show()
或者,您可以根据自己的喜好使用十六进制颜色值,请查看下面的示例。
point_y = np.array([2, 8, 4, 10])
plt.plot(point_y, c = '#FFD700')
plt.show()
如何使用 Matplotlib 修改折线图宽度
了解如何调整 Matplotlib 中的线条宽度,以提升图表的视觉效果。
point_y = np.array([2, 8, 4, 10])
plt.plot(point_y, linewidth = '16.3')
plt.show()
理解下面代码参数的含义:
plt.plot(point_y, linewidth = '16.3')
linewidth
是 Matplotlib 中的一个关键术语,用于调整线条的宽度。linewidth
的缩写是 lw
。让我们通过另一个示例来了解 linewidth
是如何工作的。
point_y = np.array([2, 8, 4, 10])
plt.plot(point_y, c = '#00ff83', lw = '9') # this time i use lw
plt.show()
让我们通过 plt.plot()
函数将两条线组合到一个图表中。
first_line = np.array([2, 8, 4, 10])
secound_line = np.array([6, 2, 12, 14])
plt.plot(first_line, c = 'r')
plt.plot(secound_line, c = "g")
plt.show()
到目前为止,您已经掌握了在 Matplotlib 中创建图表的基础知识。下一步是深入探索自定义的艺术。将绘图视为一种绘画形式——目标是创建数据的视觉表现。让您的图表看起来美观就像是在创作艺术品,当您分享它们时,人们会喜欢您的作品。继续阅读吧
如何在 Matplotlib 中为图表添加标签和标题
x = np.array ([1, 2, 3, 4, 5, 6, 7, 8])
y = np.array ([9, 10, 11, 12, 13, 14, 15, 16])
plt.plot(x, y)
plt.title("This is my - Numbers plot");
plt.xlabel ("This is my X axis - first number ");
plt.ylabel ("This is my Y axis - and secound number");
让我们分解一下上面的代码。我使用了 PyPlot 方法来绘制数据。在使用 Pyplot 时,您可以使用 xlabel()
和 ylabel()
函数分别为 x 轴和 y 轴添加标签。此外,title()
函数用于设置图表的标题。
对于 x 轴: xlabel()
对于 y 轴: ylabel()
如何在 Matplotlib 中为图表更改字体样式和大小
x = np.array ([1, 2, 3, 4, 5, 6, 7, 8])
y = np.array ([9, 10, 11, 12, 13, 14, 15, 16])
font1 = {'family':'serif','color':'red','size':18}
font2 = {'family':'serif','color':'green','size':14}
font3 = {'family':'serif','color':'blue','size':14}
# In this line of code, I create font name, color, and font size
plt.title("This is my - Numbers plot", fontdict = font1);
plt.xlabel ("This is my X axis - first number ", fontdict = font2);
plt.ylabel ("This is my Y axis - and secound number", fontdict = font3);
fontdict()
是 PyPlot 中的一个函数。现在,让我们探索如何调整标题的位置。
x = np.array ([1, 2, 3, 4, 5, 6, 7, 8])
y = np.array ([9, 10, 11, 12, 13, 14, 15, 16])
font1 = {'family':'serif','color':'red','size':16}
font2 = {'family':'serif','color':'green','size':14}
font3 = {'family':'serif','color':'blue','size':14}
plt.title("This is my - Numbers plot", fontdict = font1, loc = 'left');
plt.xlabel ("This is my X axis - first number ", fontdict = font2);
plt.ylabel ("This is my Y axis - and secound number", fontdict = font3);
上述代码通过使用 loc
参数来更改标题的位置。可以设置的值包括 left
、right
和 center
,默认值为 center
。请查看另一个示例,以便更好地理解。
#define x and y
x = [1, 2, 3, 4, 5, 6]
y = [7, 8, 9, 10, 11, 12]
#create plot of x and y
plt.plot(x, y)
#add title
plt.title('1-12 Numbers Plot', loc='left');
plt.title('I Understand', loc ='right');
上述代码将两个标题放在不同位置。
如何在Matplotlib 中添加网格线
x = [1, 2, 3, 4, 5, 6]
y = [7, 8, 9, 10, 11, 12]
plt.title ('This is my numbers line chart ');
plt.xlabel ('X axis ');
plt.ylabel ('Y axis ');
plt.plot(x, y);
plt.grid()
plt.show()
在 Pyplot 中,只需使用 grid()
函数即可将网格线添加到您的折线图中。默认情况下,X 轴和 Y 轴的网格线都是可见的,但您可以灵活地自定义这些设置。请查看下面的代码示例以快速演示。
x = [1, 2, 3, 4, 5, 6]
y = [7, 8, 9, 10, 11, 12]
plt.title ('This is my numbers line chart ');
plt.xlabel ('X axis ');
plt.ylabel ('Y axis ');
plt.plot(x, y);
plt.grid(axis = 'y') # y方向添加网格线
plt.show()
现在是时候更改网格样式了。请查看下面的示例,了解如何操作。
x = [1, 2, 3, 4, 5, 6]
y = [7, 8, 9, 10, 11, 12]
plt.title ('This is my numbers line chart ');
plt.xlabel ('X axis ');
plt.ylabel ('Y axis ');
plt.plot(x, y);
plt.grid(color = 'red', linestyle = '--', linewidth = 0.5)
# Note — grid(color = 'color', linestyle = 'linestyle', linewidth = number).
plt.show()
如何在Matplotlib 中使用Subplot
在本节中,我们将深入探讨在 Matplotlib 中创建子图的过程。但在深入代码之前,首先了解一下什么是子图。
什么是 Matplotlib 中的子图?
Matplotlib 中的子图是一项功能,它允许您在一个图形中绘制多个图表。为了更好地理解,请查看下面的代码示例。
"""
yfinance 库是一个 Python 库,用于访问来自 Yahoo Finance 的金融数据。
它可以用来下载历史和当前的股票价格、期权数据以及其他金融信息。
"""
import yfinance as yf
# Fetch stock data for three companies
stock_data_company1 = yf.download('AAPL', start='2022-01-01', end='2023-01-01')
stock_data_company2 = yf.download('MSFT', start='2022-01-01', end='2023-01-01')
stock_data_company3 = yf.download('TSLA', start='2022-01-01', end='2023-01-01')
# Create subplots
fig, axs = plt.subplots(3, 1, figsize=(10, 12), sharex=True)
# Plot stock prices for Company 1 (AAPL) in black
axs[0].plot(stock_data_company1['Close'], label='AAPL', color='black')
axs[0].set_title('Stock Price - AAPL')
axs[0].legend()
# Plot stock prices for Company 2 (MSFT) in red
axs[1].plot(stock_data_company2['Close'], label='MSFT', color='red')
axs[1].set_title('Stock Price - MSFT')
axs[1].legend()
# Plot stock prices for Company 3 (TSLA) in blue
axs[2].plot(stock_data_company3['Close'], label='TSLA', color='blue')
axs[2].set_title('Stock Price - TSLA')
axs[2].legend()
# Set common xlabel
plt.xlabel('Date')
# Adjust layout for better appearance
plt.tight_layout()
# Show the plots
plt.show()
揭开 subplot()
函数的神秘面纱
subplot()
函数有三个参数,每个参数在排列图表时都起着关键作用。第一个参数确定行数,第二个参数确定列数。第三个参数,通常称为图表索引,指定您希望在网格中显示的图表位置。
让我们查看相同的代码示例。
import yfinance as yf
import matplotlib.pyplot as plt
# Define the ticker symbols for Tesla and Apple
tesla_ticker = "TSLA"
apple_ticker = "AAPL"
# Retrieve historical stock data for Tesla and Apple
tesla_data = yf.download(tesla_ticker, period="5y")
apple_data = yf.download(apple_ticker, period="5y")
# Extract the closing prices from the historical data
tesla_prices = tesla_data["Close"]
apple_prices = apple_data["Close"]
# Create a new figure with two subplots
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 6))
# Plot Tesla's stock prices in red color on the first subplot
ax1.plot(tesla_data.index, tesla_prices, color="red", label="Tesla")
ax1.set_title("Tesla Stock Price (5Y)")
ax1.set_xlabel("Date")
ax1.set_ylabel("Stock Price")
# Plot Apple's stock prices in black color on the second subplot
ax2.plot(apple_data.index, apple_prices, color="black", label="Apple")
ax2.set_title("Apple Stock Price (5Y)")
ax2.set_xlabel("Date")
ax2.set_ylabel("Stock Price")
# Adjust the layout of the subplots to avoid overlapping labels
fig.tight_layout()
# Add a legend to the overall figure
plt.legend(loc="upper left")
# Show the combined line chart
plt.show()
现在是时候在图表中添加标题 title()
了!
import yfinance as yf
import matplotlib.pyplot as plt
# Define the ticker symbols for Tesla and Apple
tesla_ticker = "TSLA"
apple_ticker = "AAPL"
# Retrieve historical stock data for Tesla and Apple
tesla_data = yf.download(tesla_ticker, period="5y")
apple_data = yf.download(apple_ticker, period="5y")
# Extract the closing prices from the historical data
tesla_prices = tesla_data["Close"]
apple_prices = apple_data["Close"]
# Create a new figure with two subplots
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 6))
# Plot Tesla's stock prices in red color on the first subplot
ax1.plot(tesla_data.index, tesla_prices, color="red", label="Tesla")
# Set titles for the subplots (Tesla)
ax1.set_title("Tesla Stock Price (5Y)")
ax1.set_xlabel("Date")
ax1.set_ylabel("Stock Price")
# Plot Apple's stock prices in black color on the second subplot
ax2.plot(apple_data.index, apple_prices, color="black", label="Apple")
# Set titles for the subplots (Apple)
ax2.set_title("Apple Stock Price (5Y)")
ax2.set_xlabel("Date")
ax2.set_ylabel("Stock Price")
# Add an overall title to the figure
fig.suptitle("Comparison of Tesla and Apple Stock Prices (5Y)")
# Adjust the layout of the subplots to avoid overlapping labels
fig.tight_layout()
# Add a legend to the overall figure
plt.legend(loc="upper left")
# Show the combined line chart
plt.show()
我希望您能理解 Matplotlib 中的子图。如果还不完全明白,也没关系。多实践,你就会理解一切。
如何在Matplotlib使用散点图
散点图通过点的形式直观地表示数据。要创建散点图,您需要两个相同长度的数组——一个用于 X 轴的值,另一个用于 Y 轴的值。
如果这听起来很清楚,那太好了!如果不太明白,也没关系。查看下面的示例代码以获得更清晰的理解。
# Data
numbers = np.array([2, 3, 4, 5])
multiply_2 = np.array([4, 6, 8, 10])
# Create a scatter plot with red dots
plt.scatter(numbers, multiply_2, color='red', marker='o', label='Multiply by 2')
# Add grid
plt.grid(True, linestyle='--', alpha=0.7)
# Add labels and title
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.title('Scatter Plot: Numbers vs. Multiply by 2')
# Show the plot
plt.show()
让我们分解一下上面的代码。在 x 轴上,我们有一系列数字:[2, 3, 4, 5]。对应的 y 轴值表示将每个数字乘以 2 的结果:[4, 6, 8, 10]。现在,让我们再看一个示例!
# Data
years = np.array([2010, 2012, 2014, 2016, 2018, 2020])
bank_assets = np.array([500, 600, 750, 900, 1100, 1300])
# Create a scatter plot with blue dots and grid
plt.scatter(years, bank_assets, color='blue', marker='o', label='Banking Growth')
plt.grid(True, linestyle='--', alpha=0.7)
# Add labels and a title
plt.xlabel('Year')
plt.ylabel('Bank Assets (in Billion USD)')
plt.title('Banking Growth Over the Years')
# Show the plot
plt.show()
在上述散点图中,我正在可视化银行多年来的增长情况。x 轴表示从 2010 年到 2020 年的年份,而 y 轴显示对应的银行资产(以十亿美元为单位)。
图中的每个点代表银行财务状况的一个快照,使我们能够观察和分析其在指定时期内的增长轨迹。点的上升趋势表明正增长,展示了银行多年来资产的增加。
现在,我们来创建另一个图表进行比较。以下是一个散点图示例,比较计算机科学和数学的年度考试通过报告。
# Data (adjusted to showcase changes)
years = np.array([2015, 2016, 2017, 2018, 2019, 2020])
cs_pass_rate = np.array([75, 80, 85, 90, 92, 95])
math_pass_rate = np.array([80, 80, 85, 80, 90, 80]) # Math pass rate increases in 2017 and 2019
# Create a scatter plot with red dots for Computer Science and circular dots for Math
plt.scatter(years, cs_pass_rate, color='red', marker='o', label='Computer Science')
plt.scatter(years, math_pass_rate, color='black', marker='o', facecolors='none', edgecolors='black', label='Math')
# Add grid
plt.grid(True, linestyle='--', alpha=0.7)
# Add labels and a title
plt.xlabel('Year')
plt.ylabel('Passing Rate (%)')
plt.title('Yearly Exam Passing Report: Computer Science vs. Math')
# Add a legend
plt.legend()
# Show the plot
plt.show()
在散点图中为每个点选择不同的颜色
# This is a computer science exam passing data
years = np.array([2008, 2012, 2014, 2018, 2022])
pass_exam_computer_science = np.array([80, 77, 67, 56, 46])
# Remove yellow and add orange
colors = np.array(["red", "green", "black", "orange", "gray"])
plt.scatter(years, pass_exam_computer_science, c=colors, marker='o', s=50) # Specify marker style and size
plt.title("This is yearly report computer science exam")
plt.xlabel("Years")
plt.ylabel("Passing percentage")
plt.grid()
plt.show()
现在,让我们深入探索 Matplotlib 的 colormap 模块,它提供了丰富的颜色列表。这些列表中的每个颜色值范围从 0 到 100。为了更好地理解这个概念,让我们查看下面的示例。
您看到的上面的图像名为‘viridis’,它的颜色范围从 0 的紫色到 100 的黄色。🟣🟡 现在,您可能会想知道。
如何使用Colormap
如下代码,黄色点(46)最小,紫色点(80)最大。
# This is a computer science exam passing data
years = np.array([2008, 2012, 2014, 2018, 2022])
pass_exam_computer_science = np.array([80, 77, 67, 56, 46])
colors = np.array ([10, 20, 30, 50, 60 ])
"""
To apply a specific colormap, you can use the cmap keyword.
In this instance, I've chosen to use the 'viridis' colormap.
"""
plt.scatter (years, pass_exam_computer_science, c = colors, cmap = 'viridis', s=50)
plt.title ("This is yearly report computer science exam ")
plt.xlabel("Years")
plt.ylabel("Passing percantage")
plt.grid()
plt.show()
修改散点图的大小
探索如何通过修改单个点的大小来增强Matplotlib中的散点图。这种自定义可以吸引对特定数据点的注意或更有效地突出显示模式。
# This is a computer science exam passing data
years = np.array([2008, 2012, 2014, 2018, 2022])
pass_exam_computer_science = np.array([80, 77, 67, 56, 46])
"""
在Matplotlib中,'s' 关键字允许你调整散点图中点的大小。在使用它之前,你需要创建一个数组来指定所需的大小。
这个数组应该与散点图中的x和y坐标数组具有相同的长度,以便为每个点指定一个大小。
"""
sizes = np.array ([36, 100, 150, 90, 300])
#Now it’s time to pass, your array in the s argument
plt.scatter( years, pass_exam_computer_science, s=sizes)
plt.title ("This is yearly report computer science exam ")
plt.xlabel("Years")
plt.ylabel("Passing percantage")
plt.grid()
plt.show()
注意:当使用颜色映射或调整点的大小时,请确保您的数组大小相匹配。
如下代码,数组不相等时,会报错误。
first_array = np.array ([1, 2, 3, 4])
secound_array = np.array ([1, 2, 3])
plt.scatter (first_array, secound_array)
#output:ValueError: x and y must be the same size
如何使用Matplotlib绘制条形图(Bar Plot)
条形图是比较分类数据和可视化趋势的优秀工具。📊 在Matplotlib的Pyplot模块中,bar()
函数是生成条形图(或柱状图)的关键工具。
bank_name = np.array(["Yes Bank", "Axis Bank", "HDFC Bank", "State Bank"])
bank_growth_this_year = np.array([10, 60, 40, 88])
# Specify colors for each bank
colors = np.array(["blue", "red", "black", "skyblue"])
plt.bar(bank_name, bank_growth_this_year, color=colors)
plt.title("Bank growth report in this 2021 Year")
plt.xlabel("Bank Name")
plt.ylabel("Growth percentage")
#plt.grid(True) # Add grid
plt.show()
绘制水平方向的条形图
# This is a computer science exam passing data
years = np.array([2008, 2012, 2014, 2018, 2022])
pass_exam_computer_science = np.array([80, 77, 67, 56, 46])
sizes = np.array ([36, 100, 150, 90, 300])
#Use barh( ) function to plot the horizontal bar in your data
plt.barh( years, pass_exam_computer_science)
plt.title ("This is yearly report computer science exam ")
plt.xlabel("Years")
plt.ylabel("Passing percantage")
plt.grid()
plt.show()
改变条形图颜色
bank_name = np.array(["Yes Bank", "Axis Bank", "HDFC Bank", "State Bank"])
bank_growth_this_year = np.array([10, 60, 40, 88])
"""
您可以使用color关键字灵活地修改垂直和水平条的颜色。只需指定所需颜色即可。
"""
plt.bar(bank_name, bank_growth_this_year, color="lightgreen", width=0.2) # Adjust width as needed
plt.title("Bank growth report in this 2021 Year")
plt.xlabel("Bank Name")
plt.ylabel("Growth percentage")
plt.show()
修改水平方向的bar颜色
best_tech_company = np.array(["Apple", "Facebook", "Microsoft", "Amazon", "Google"])
company_growth_this_month = np.array([60, 45, 30, 85, 70])
# Specify colors for each company
colors = np.array(["black", "blue", "green", "orange", "skyblue"])
plt.barh(best_tech_company, company_growth_this_month, color=colors)
plt.title("Company growth this month report")
plt.xlabel("Growth percentage")
plt.ylabel("Company Name")
plt.show()
下面代码有一些颜色列表,可以尝试用在你的条形图上。或者你也可以使用十六进制颜色。下面是一个如何排绘制两个条形图的例子。
# Data for the first plot
bank_name = np.array(["Yes Bank", "Axis Bank", "HDFC Bank", "State Bank"])
bank_growth_this_year = np.array([10, 60, 40, 88])
# Data for the second plot
best_tech_company = np.array(["Apple", "Facebook", "Microsoft", "Amazon", "Google"])
company_growth_this_month = np.array([60, 45, 30, 85, 70])
colors = np.array(["black", "blue", "green", "orange", "skyblue"])
# Create a figure with two subplots
plt.figure(figsize=(12, 6))
# Plot the first subplot
plt.subplot(1, 2, 1) # 1 row, 2 columns, first subplot
plt.bar(bank_name, bank_growth_this_year, color="lightgreen", width=0.2)
plt.title("Bank growth report in this 2021 Year")
plt.xlabel("Bank Name")
plt.ylabel("Growth percentage")
# Plot the second subplot
plt.subplot(1, 2, 2) # 1 row, 2 columns, second subplot
plt.barh(best_tech_company, company_growth_this_month, color=colors)
plt.title("Company growth this month report")
plt.xlabel("Growth percentage")
plt.ylabel("Company Name")
# Adjust layout for better spacing
plt.tight_layout()
# Show the figure
plt.show()
如何调整条形图的宽度
现在,让我们通过调整条形宽度来让图表更有趣一些。因为,你知道,一点设计上的小魔法真的可以让我们的图表脱颖而出。
best_tech_company = np.array (["Apple", "Facebook", "Microsoft", "Amazon", "Google"])
company_growth_this_month = np.array ([60, 45, 30, 85, 70])
"""
只需使用'width'关键字并设置你偏好的值来调整条形图的宽度。顺便说一下,默认宽度是0.8。
"""
plt.bar(best_tech_company, company_growth_this_month, width = 0.1, color = "#FAF18E")
plt.title("Company growth this month report")
plt.xlabel("Company Name")
plt.ylabel("Growth percantage")
plt.grid()
plt.show()
调整水平条形图的高度:
best_tech_company = np.array (["Apple", "Facebook", "Microsoft", "Amazon", "Google"])
company_growth_this_month = np.array ([60, 45, 30, 85, 70])
#垂直条形图使用width关键字,水平条形图使用height关键字
plt.barh(best_tech_company, company_growth_this_month, height = 0.1, color = "#FAF18E")
plt.title("Company growth this month report")
plt.xlabel("Company Name")
plt.ylabel("Growth percantage")
plt.grid()
plt.show()
使用subplot结合上述两种图形:
# Data for the first plot
best_tech_company = np.array(["Apple", "Facebook", "Microsoft", "Amazon", "Google"])
company_growth_this_month = np.array([60, 45, 30, 85, 70])
# Create a figure with two subplots side by side
plt.figure(figsize=(12, 6))
# Plot the first subplot (vertical bars)
plt.subplot(1, 2, 1) # 1 row, 2 columns, first subplot
plt.bar(best_tech_company, company_growth_this_month, width=0.1, color="#FAF18E")
plt.title("Vertical Bars - Company growth this month report")
plt.xlabel("Company Name")
plt.ylabel("Growth percentage")
plt.grid()
# Plot the second subplot (horizontal bars)
plt.subplot(1, 2, 2) # 1 row, 2 columns, second subplot
plt.barh(best_tech_company, company_growth_this_month, height=0.1, color="#FAF18E")
plt.title("Horizontal Bars - Company growth this month report")
plt.xlabel("Growth percentage")
plt.ylabel("Company Name")
plt.grid()
# Adjust layout for better spacing
plt.tight_layout()
# Show the figure
plt.show()
使用Matplotlib构建直方图
与条形图类似,直方图是一种数据的图形表示,用于显示特定区间内数据点的频率。每个区间都用一个垂直条来表示。虽然一开始可能看起来很混乱,但多加练习就会更加清晰。掌握它的关键是实践
average_salary_india = np.array([5000, 8000, 9500, 10000, 14500])
companies = ["A", "B", "C", "D", "E"]
plt.bar(companies, average_salary_india, width=0.2, color="lightgreen", edgecolor="black")
# Adjust the width and color as needed
plt.title("Average Salary of Employees in India")
#plt.xlabel("Company")
#plt.ylabel("Average Salary")
plt.grid(axis='y') # Add grid to the y-axis for better readability
plt.show()
使用Matplotlib制作饼图(Pie Chart)
在本节中,您将学习如何使用 Python 在 Matplotlib 中创建视觉效果出色的饼图。饼图是一种展示数据分布的好方法,Matplotlib 使生成它们变得非常简单。让我们开始吧!
pie_chart_i_learn = np.array([21, 33, 30, 45, 65])
#使用pie函数构建pie chart.
plt.pie(pie_chart_i_learn)
plt.show()
在饼图中,数据中的每个值(21, 33, 30, 45, 65)都由一个楔形的切片表示,这些切片共同构成了整个图表。正如您所知,每个图表都有两个重要的伙伴:X 轴和 Y 轴。在默认的饼图中,第一个切片从 X 轴开始,并逆时针移动。
有没有想过饼图中每个切片的大小是如何确定的?答案是:每个切片的大小与其相对于所有其他值的大小相关。它是通过一个简单的公式计算出来的。
company_growth_this_year = np.array([68, 75, 21, 40, 33, 80])
company_name = np.array(["Amazon", "Walmart", "Facebook", "Microsoft", "Google", "Apple"])
# Custom colors for each company
company_colors = {
"Amazon": "skyblue",
"Walmart": "lightgreen",
"Facebook": "orange",
"Microsoft": "red",
"Google": "lightblue",
"Apple": "gray"
}
# Retrieve colors for each company or use a default color
colors = [company_colors.get(company, "gray") for company in company_name]
# Set the figure size
plt.figure(figsize=(8, 8))
plt.pie(company_growth_this_year, labels=company_name, colors=colors, autopct='%1.1f%%', startangle=140)
# Add grid
plt.grid(True, linestyle='--', alpha=0.7)
# Modify title color and font style
plt.title("Company Growth This Year", loc="left", fontdict={'fontsize': 16, 'fontweight': 'bold', 'fontstyle': 'italic', 'color': 'black'})
# Modify company name font style
plt.setp(plt.gca().get_xticklabels(), fontweight='bold', color='black')
plt.show()
在 Matplotlib 中更改饼图切片的角度,如下代码设置第一个切片(Amazon)与X轴角度为90度。
company_growth_this_year = np.array([68, 75, 21, 40, 33, 80])
company_name = np.array(["Amazon", "Walmart", "Facebook", "Microsoft", "Google", "Apple"])
# Custom colors for each company
company_colors = {
"Amazon": "skyblue",
"Walmart": "lightgreen",
"Facebook": "orange",
"Microsoft": "red",
"Google": "lightblue",
"Apple": "gray"
}
# Retrieve colors for each company or use a default color
colors = [company_colors.get(company, "gray") for company in company_name]
# Set the figure size
plt.figure(figsize=(8, 8))
# Change the start angle to 90 degrees
plt.pie(company_growth_this_year, labels=company_name, colors=colors, autopct='%1.1f%%', startangle=90)
# Add grid
plt.grid(True, linestyle='--', alpha=0.7)
# Modify title color and font style
plt.title("Company Growth This Year", loc="left", fontdict={'fontsize': 16, 'fontweight': 'bold', 'fontstyle': 'italic', 'color': 'black'})
# Modify company name font style
plt.setp(plt.gca().get_xticklabels(), fontweight='bold', color='black')
plt.show()
整理上面两张图,比较第一个切片的不同角度:
# Data for the first pie chart
company_growth_this_year_1 = np.array([68, 75, 21, 40, 33, 80])
company_name_1 = np.array(["Amazon", "Walmart", "Facebook", "Microsoft", "Google", "Apple"])
# Custom colors for each company
company_colors_1 = {
"Amazon": "skyblue",
"Walmart": "lightgreen",
"Facebook": "orange",
"Microsoft": "red",
"Google": "lightblue",
"Apple": "gray"
}
# Retrieve colors for each company or use a default color
colors_1 = [company_colors_1.get(company, "gray") for company in company_name_1]
# Data for the second pie chart
company_growth_this_year_2 = np.array([68, 75, 21, 40, 33, 80])
company_name_2 = np.array(["Amazon", "Walmart", "Facebook", "Microsoft", "Google", "Apple"])
# Custom colors for each company
company_colors_2 = {
"Amazon": "skyblue",
"Walmart": "lightgreen",
"Facebook": "orange",
"Microsoft": "red",
"Google": "lightblue",
"Apple": "gray"
}
# Retrieve colors for each company or use a default color
colors_2 = [company_colors_2.get(company, "gray") for company in company_name_2]
# Set up a subplot with 1 row and 2 columns
plt.figure(figsize=(16, 8))
# Plot the first pie chart in the first subplot
plt.subplot(1, 2, 1)
plt.pie(company_growth_this_year_1, labels=company_name_1, colors=colors_1, autopct='%1.1f%%', startangle=140)
plt.grid(True, linestyle='--', alpha=0.7)
plt.title("Company Growth This Year (Chart 1)", loc="left", fontdict={'fontsize': 16, 'fontweight': 'bold', 'fontstyle': 'italic', 'color': 'black'})
plt.setp(plt.gca().get_xticklabels(), fontweight='bold', color='black')
# Plot the second pie chart in the second subplot
plt.subplot(1, 2, 2)
plt.pie(company_growth_this_year_2, labels=company_name_2, colors=colors_2, autopct='%1.1f%%', startangle=90)
plt.grid(True, linestyle='--', alpha=0.7)
plt.title("Company Growth This Year (Chart 2)", loc="left", fontdict={'fontsize': 16, 'fontweight': 'bold', 'fontstyle': 'italic', 'color': 'black'})
plt.setp(plt.gca().get_xticklabels(), fontweight='bold', color='black')
# Adjust layout to prevent overlap
plt.tight_layout()
plt.show()
在Matplotlib中切割饼图
banks = ["SBI", "Axis Bank", "Yes Bank", "Bank of Baroda", "HDFC Bank"]
sizes = [21, 7, 2, 5, 15]
fig, ax = plt.subplots()
ax.pie(sizes, explode=(0, 0.1, 0.1, 0.1, 0.1), labels=banks, autopct='%1.1f%%',
shadow=True, startangle=90)
ax.axis('equal')
ax.set_title("Top Banks in India by Percentage")
plt.show()
通过使用 explode
参数并传入一个值切割饼图,值表示切片距离圆心的距离。
在 Matplotlib 中更改饼图中切片的颜色
banks = ["SBI", "Axis Bank", "Yes Bank", "Bank of Baroda", "HDFC Bank"]
sizes = [21, 7, 2, 5, 15]
colors = ['brown', 'lightcoral', 'cyan', 'orange', 'blue']
fig, ax = plt.subplots()
ax.pie(sizes, explode=(0, 0.1, 0.1, 0.1, 0.1), colors=colors,
labels=banks, autopct='%1.1f%%', shadow=True, startangle=90)
ax.axis('equal')
ax.set_title("Top Banks in India by Percentage")
plt.show()
保存Matplot图像为PNG格式
答案很简单。您可以使用 savefig()
函数将此图表保存到您的计算机上。
banks = ["SBI", "Axis Bank", "Yes Bank", "Bank of Baroda", "HDFC Bank"]
sizes = [21, 7, 2, 5, 15]
colors = ['brown', 'lightcoral', 'cyan', 'orange', 'blue']
fig, ax = plt.subplots()
patches, texts, autotexts = ax.pie(sizes, explode=(0, 0.1, 0.1, 0.1, 0.1), colors=colors,
labels=banks, autopct='%1.1f%%', shadow=True, startangle=90)
# Add legend
ax.legend(patches, banks, loc="upper left", bbox_to_anchor=(1, 0.5), title="Banks")
# Set equal aspect ratio
ax.axis('equal')
ax.set_title("Top Banks in India by Percentage")
# Save the image
plt.savefig("pie_chart_banks.png", bbox_inches="tight")
# Show the plot
plt.show()
结束语
通过本指南,我们已经深入探索了 Matplotlib 的各种功能,从基本的折线图到复杂的子图和自定义饼图。无论您是初学者还是有经验的用户,相信通过这些例子和代码实践,您已经掌握了如何使用 Matplotlib 来创建美观且具有信息量的数据可视化图表。继续探索和实践,您的数据可视化技能将会越来越强大!