从零开始学绘图!手把手教新手使用Matplotlib创建个性化图表

文摘   2024-08-22 20:47   广东  

在本文中,您将逐步学习Matplotlib Python数据可视化库。不论您是完全的初学者,还是希望提高技能,这篇指南都为您量身定制,不需要任何先前的知识。到本文结束时,您将对这个强大的库有全面的理解。

继续阅读吧!

现在,将Matplotlib库导入您的jupyter notebook。

import matplotlib
import matplotlib.pyplot as plt

# 打印版本
print(matplotlib.__version__)

# Output > 3.7.1

让我们创建您的第一个图表。

plt.plot();

image-20240820221455753

恭喜您完成了第一个图表!现在,让我们深入一些细节,帮助您理解这个空图表背后发生的事情。

请看下面的图片,它展示了Matplotlib图表的结构组成。

image-20240820221749408

需要记住的两个关键点:

  • FigureFigure 是包含您绘制的所有内容的主要窗口或页面,查看下面的示例以更好地理解。
plt.plot()

image-20240820222021655
  • Axes:在这个 Figure 中,您可以添加 Axes。Axes 定义了您指定要绘制数据点的区域。请参阅下面的图片以获取视觉指南。
number_one = [123456789]
number_two = [102030405060708090]

# 绘制图形
plt.plot(number_one, number_two);

# 给axes添加label
plt.xlabel('X-axis Label');
plt.ylabel('Y-axis Label');

image-20240820222234455

请记住——每个图表都包括两个轴:X轴和Y轴。在上面的示例中:

  • X轴表示 “number_one”
  • Y轴表示 “number_two”
# 1. import库
import matplotlib.pyplot as plt

# 2. 设置可视化数据
first_number  = [123456789101112]
secound_number = [111213141516171819202122]

# 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")

image-20240820223042698

现在,您已成功创建了标题为“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(111)
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(21, figsize=(108))

# 绘制第一个图形区域
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()

image-20240820224107503

Matplotlib 是建立在 NumPy 数组之上的。因此,在本节中,我们将学习使用 NumPy 数组进行绘图的最常见类型。在本节中,我将涵盖以下主题。

  • Line(线图)
  • Scatter(散点图)
  • Bar(条形图)
  • Histogram(直方图)
  • Pie(饼图)
  • **Subplots()**(子图)

首先导入 NumPy 库:

import numpy as np

但在学习图表之前,了解 Matplotlib标记的概念是至关重要的。这将帮助您更好地理解 Matplotlib 库中的每种图表。

Matplotlib Marker(标记)

point_y = np.array([28412])
plt.plot(point_y, marker = 'o')
plt.show()

image-20240820225615805

标记作为图表中的视觉指示器,使您能够突出显示特定的兴趣点。在以下示例中,我标记了点 2、4、8、12。请参阅上面的图片以获得更清晰的可视化。要在图表中标记点,您可以使用 marker 关键字。

point_y = np.array([28412])
plt.plot(point_y, marker = '*');

image-20240820225857015

画红色线:

point_y = np.array([28410])
plt.plot(point_y, 'ro-'# o is a mareker and r is a red 
plt.show()

image-20240821223734590

画绿色虚线:

point_y = np.array([28410])
plt.plot(point_y, 'o:g')
plt.show()

image-20240821223838719

以下是 Marker 中的一些颜色参考:

  • ‘r’ — Red🔴
  • ‘g’ — Green 🟢
  • ‘b’ — Blue🔵
  • ‘y’ — Yellow 🟡
  • ‘k’ — Black ⚫

改变标记的大小

point_y = np.array([38110])
plt.plot(point_y, marker = 'o', ms = 21# ms是标记大小(Markersize)的简称
plt.show()

image-20240821224217168

修改绿色线标记大小:

point_y = np.array([28410])
plt.plot(point_y, 'o:g', ms = 21)
plt.show()

image-20240821224319266

绘制标记的边缘:

point_y = np.array([26110])
plt.plot(point_y, marker = 'o', ms = 20, mec = 'r')
plt.show()

image-20240821224553203

理解下面代码的参数含义:

plt.plot(point_y, marker = 'o', ms = 20, mec = 'r')
  • marker:用于在图表上标记点的符号,例如圆形、方形或三角形。
  • ms:标记的大小,决定标记符号的尺寸。在此示例中,我使用了大小为 20 的标记。
  • mec(mark edge color):标记轮廓的颜色。缩写 mec 代表“标记边缘颜色”。在上面的示例中,我使用了红色作为标记的边缘颜色。

如何使用 Matplotlib 创建折线图

在本节中,您将学习如何使用 Matplotlib 创建令人印象深刻的折线图。

point_y = np.array([28410])
plt.plot(point_y, linestyle = 'dotted')
plt.show()

image-20240821225502457

解释下面代码的参数含义:

plt.plot(point_y, linestyle = 'dotted'

Matplotlib 中的 linestyle 帮助您调整折线图的外观。您可以使用完整的单词 linestyle 或缩写 ls。有多种样式,如实线、虚线和点线。例如,如果您想要一条点线,可以将 linestyle 设置为 'dotted',或者使用 ls='dotted'。这一切都是为了自定义线条的外观!

point_y = np.array([28410])
plt.plot(point_y, ls = 'dotted'# 使用ls 
plt.show()

image-20240821225710623

改变不同的虚线风格:

point_y = np.array([28410])
plt.plot(point_y, ls = 'dashed'# i use dashed style 
plt.show()

image-20240821225909832
point_y = np.array([28410])
plt.plot(point_y, ls = 'dashdot'# i use dashdot style
plt.show()

image-20240821225936743

如何使用 Matplotlib 修改折线图颜色

让我们通过下面的代码示例来了解如何在 Matplotlib 中自定义线条颜色。

point_y = np.array([28410])
plt.plot(point_y, color = 'g')
plt.show()

image-20240821230217566

理解下面代码的参数含义:

plt.plot(point_y, color = 'g')

color 是 Matplotlib 中的一个关键字,用于设置线条颜色。color 的缩写是 c。您可以使用 colorc,两者效果相同。请参阅下面的示例!

point_y = np.array([28410])
plt.plot(point_y, c = 'g'# this time i use c keyword 
plt.show()

image-20240821230333949

或者,您可以根据自己的喜好使用十六进制颜色值,请查看下面的示例。

point_y = np.array([28410])
plt.plot(point_y, c = '#FFD700')
plt.show()

image-20240821230425726

如何使用 Matplotlib 修改折线图宽度

了解如何调整 Matplotlib 中的线条宽度,以提升图表的视觉效果。

point_y = np.array([28410])
plt.plot(point_y, linewidth = '16.3')
plt.show()

image-20240821230644762

理解下面代码参数的含义:

plt.plot(point_y, linewidth = '16.3')

linewidth 是 Matplotlib 中的一个关键术语,用于调整线条的宽度。linewidth 的缩写是 lw。让我们通过另一个示例来了解 linewidth 是如何工作的。

point_y = np.array([28410])
plt.plot(point_y, c = '#00ff83', lw = '9'# this time i use lw
plt.show()

image-20240821230809722

让我们通过 plt.plot() 函数将两条线组合到一个图表中。

first_line = np.array([28410])
secound_line = np.array([621214])
plt.plot(first_line, c = 'r')
plt.plot(secound_line, c = "g")
plt.show()

image-20240821230953604

到目前为止,您已经掌握了在 Matplotlib 中创建图表的基础知识。下一步是深入探索自定义的艺术。将绘图视为一种绘画形式——目标是创建数据的视觉表现。让您的图表看起来美观就像是在创作艺术品,当您分享它们时,人们会喜欢您的作品。继续阅读吧

如何在 Matplotlib 中为图表添加标签和标题

x = np.array ([12345678])
y = np.array ([910111213141516])
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");

image-20240821231130548

让我们分解一下上面的代码。我使用了 PyPlot 方法来绘制数据。在使用 Pyplot 时,您可以使用 xlabel()ylabel() 函数分别为 x 轴和 y 轴添加标签。此外,title() 函数用于设置图表的标题。

  • 对于 x 轴:xlabel()
  • 对于 y 轴:ylabel()

如何在 Matplotlib 中为图表更改字体样式和大小

x = np.array ([12345678])
y = np.array ([910111213141516])

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);

image-20240821231420271

fontdict() 是 PyPlot 中的一个函数。现在,让我们探索如何调整标题的位置。

x = np.array ([12345678])
y = np.array ([910111213141516])

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);

image-20240821231605040

上述代码通过使用 loc 参数来更改标题的位置。可以设置的值包括 leftrightcenter,默认值为 center。请查看另一个示例,以便更好地理解。

#define x and y
x = [123456]
y = [789101112]
#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');

image-20240821231804423

上述代码将两个标题放在不同位置。

如何在Matplotlib 中添加网格线

x = [123456]
y = [789101112]

plt.title ('This is my numbers line chart ');
plt.xlabel ('X axis ');
plt.ylabel ('Y axis ');

plt.plot(x, y);
plt.grid()
plt.show()

image-20240821231956912

在 Pyplot 中,只需使用 grid() 函数即可将网格线添加到您的折线图中。默认情况下,X 轴和 Y 轴的网格线都是可见的,但您可以灵活地自定义这些设置。请查看下面的代码示例以快速演示。

x = [123456]
y = [789101112]

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()

image-20240821232214427

现在是时候更改网格样式了。请查看下面的示例,了解如何操作。

x = [123456]
y = [789101112]

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()

image-20240821232444940

如何在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(31, figsize=(1012), 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()

image-20240821232903831

揭开 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(12, figsize=(126))

# 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()

image-20240821233031403

现在是时候在图表中添加标题 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(12, figsize=(126))

# 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()

image-20240821233233529

我希望您能理解 Matplotlib 中的子图。如果还不完全明白,也没关系。多实践,你就会理解一切。

如何在Matplotlib使用散点图

散点图通过点的形式直观地表示数据。要创建散点图,您需要两个相同长度的数组——一个用于 X 轴的值,另一个用于 Y 轴的值。

如果这听起来很清楚,那太好了!如果不太明白,也没关系。查看下面的示例代码以获得更清晰的理解。

# Data
numbers = np.array([2345])
multiply_2 = np.array([46810])

# 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()

image-20240821233523852

让我们分解一下上面的代码。在 x 轴上,我们有一系列数字:[2, 3, 4, 5]。对应的 y 轴值表示将每个数字乘以 2 的结果:[4, 6, 8, 10]。现在,让我们再看一个示例!

# Data
years = np.array([201020122014201620182020])
bank_assets = np.array([50060075090011001300])

# 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()

image-20240821233629463

在上述散点图中,我正在可视化银行多年来的增长情况。x 轴表示从 2010 年到 2020 年的年份,而 y 轴显示对应的银行资产(以十亿美元为单位)。

图中的每个点代表银行财务状况的一个快照,使我们能够观察和分析其在指定时期内的增长轨迹。点的上升趋势表明正增长,展示了银行多年来资产的增加。

现在,我们来创建另一个图表进行比较。以下是一个散点图示例,比较计算机科学和数学的年度考试通过报告。

# Data (adjusted to showcase changes)
years = np.array([201520162017201820192020])
cs_pass_rate = np.array([758085909295])
math_pass_rate = np.array([808085809080])  # 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()

image-20240821233812592
在散点图中为每个点选择不同的颜色
# This is a computer science exam passing data
years = np.array([20082012201420182022])
pass_exam_computer_science = np.array([8077675646])

# 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()

image-20240821233908701

现在,让我们深入探索 Matplotlib 的 colormap 模块,它提供了丰富的颜色列表。这些列表中的每个颜色值范围从 0 到 100。为了更好地理解这个概念,让我们查看下面的示例。

image-20240821234050512

您看到的上面的图像名为‘viridis’,它的颜色范围从 0 的紫色到 100 的黄色。🟣🟡 现在,您可能会想知道。

如何使用Colormap

如下代码,黄色点(46)最小,紫色点(80)最大。

# This is a computer science exam passing data 
years = np.array([20082012201420182022])
pass_exam_computer_science = np.array([8077675646])

colors = np.array ([1020305060 ])


"""
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()

image-20240821234646596
修改散点图的大小

探索如何通过修改单个点的大小来增强Matplotlib中的散点图。这种自定义可以吸引对特定数据点的注意或更有效地突出显示模式。

# This is a computer science exam passing data 
years = np.array([20082012201420182022])
pass_exam_computer_science = np.array([8077675646])

"""
在Matplotlib中,'s' 关键字允许你调整散点图中点的大小。在使用它之前,你需要创建一个数组来指定所需的大小。
这个数组应该与散点图中的x和y坐标数组具有相同的长度,以便为每个点指定一个大小。
"""



sizes = np.array ([3610015090300])

#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()

image-20240821235107301

注意:当使用颜色映射或调整点的大小时,请确保您的数组大小相匹配。

如下代码,数组不相等时,会报错误。

first_array = np.array ([1234])
secound_array = np.array ([123])

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([10604088])

# 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()

image-20240822082434158
绘制水平方向的条形图
# This is a computer science exam passing data 
years = np.array([20082012201420182022])
pass_exam_computer_science = np.array([8077675646])

sizes = np.array ([3610015090300])

#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()

image-20240822082915059
改变条形图颜色
bank_name = np.array(["Yes Bank""Axis Bank""HDFC Bank""State Bank"])
bank_growth_this_year = np.array([10604088])

"""
您可以使用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()

image-20240822083043043

修改水平方向的bar颜色

best_tech_company = np.array(["Apple""Facebook""Microsoft""Amazon""Google"])
company_growth_this_month = np.array([6045308570])

# 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()

image-20240822083215004

下面代码有一些颜色列表,可以尝试用在你的条形图上。或者你也可以使用十六进制颜色。下面是一个如何排绘制两个条形图的例子。

# Data for the first plot
bank_name = np.array(["Yes Bank""Axis Bank""HDFC Bank""State Bank"])
bank_growth_this_year = np.array([10604088])

# Data for the second plot
best_tech_company = np.array(["Apple""Facebook""Microsoft""Amazon""Google"])
company_growth_this_month = np.array([6045308570])
colors = np.array(["black""blue""green""orange""skyblue"])

# Create a figure with two subplots
plt.figure(figsize=(126))

# Plot the first subplot
plt.subplot(121)  # 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(122)  # 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()

image-20240822083416404
如何调整条形图的宽度

现在,让我们通过调整条形宽度来让图表更有趣一些。因为,你知道,一点设计上的小魔法真的可以让我们的图表脱颖而出。

best_tech_company = np.array (["Apple""Facebook""Microsoft""Amazon""Google"])
company_growth_this_month = np.array ([6045308570])

"""
只需使用'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()

image-20240822083600376

调整水平条形图的高度:

best_tech_company = np.array (["Apple""Facebook""Microsoft""Amazon""Google"])
company_growth_this_month = np.array ([6045308570])

#垂直条形图使用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()

image-20240822094202466

使用subplot结合上述两种图形:

# Data for the first plot
best_tech_company = np.array(["Apple""Facebook""Microsoft""Amazon""Google"])
company_growth_this_month = np.array([6045308570])

# Create a figure with two subplots side by side
plt.figure(figsize=(126))

# Plot the first subplot (vertical bars)
plt.subplot(121)  # 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(122)  # 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()

image-20240822094312951

使用Matplotlib构建直方图

与条形图类似,直方图是一种数据的图形表示,用于显示特定区间内数据点的频率。每个区间都用一个垂直条来表示。虽然一开始可能看起来很混乱,但多加练习就会更加清晰。掌握它的关键是实践

average_salary_india = np.array([5000800095001000014500])
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()

image-20240822094440098

使用Matplotlib制作饼图(Pie Chart)

在本节中,您将学习如何使用 Python 在 Matplotlib 中创建视觉效果出色的饼图。饼图是一种展示数据分布的好方法,Matplotlib 使生成它们变得非常简单。让我们开始吧!

pie_chart_i_learn = np.array([2133304565])

#使用pie函数构建pie chart.
plt.pie(pie_chart_i_learn)
plt.show()

image-20240822123547713

在饼图中,数据中的每个值(21, 33, 30, 45, 65)都由一个楔形的切片表示,这些切片共同构成了整个图表。正如您所知,每个图表都有两个重要的伙伴:X 轴和 Y 轴。在默认的饼图中,第一个切片从 X 轴开始,并逆时针移动。

有没有想过饼图中每个切片的大小是如何确定的?答案是:每个切片的大小与其相对于所有其他值的大小相关。它是通过一个简单的公式计算出来的。

company_growth_this_year = np.array([687521403380])
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=(88))

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()

image-20240822124151483

在 Matplotlib 中更改饼图切片的角度,如下代码设置第一个切片(Amazon)与X轴角度为90度。

company_growth_this_year = np.array([687521403380])
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=(88))

# 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()

image-20240822124444874

整理上面两张图,比较第一个切片的不同角度:

# Data for the first pie chart
company_growth_this_year_1 = np.array([687521403380])
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([687521403380])
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=(168))

# Plot the first pie chart in the first subplot
plt.subplot(121)
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(122)
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()

image-20240822124553573
在Matplotlib中切割饼图
banks = ["SBI""Axis Bank""Yes Bank""Bank of Baroda""HDFC Bank"]
sizes = [2172515]
 
fig, ax = plt.subplots()
ax.pie(sizes, explode=(00.10.10.10.1), labels=banks, autopct='%1.1f%%'
       shadow=True, startangle=90)
ax.axis('equal'

ax.set_title("Top Banks in India by Percentage")

plt.show()

image-20240822124718249

通过使用 explode 参数并传入一个值切割饼图,值表示切片距离圆心的距离。

在 Matplotlib 中更改饼图中切片的颜色
banks = ["SBI""Axis Bank""Yes Bank""Bank of Baroda""HDFC Bank"]

sizes = [2172515]  
colors = ['brown''lightcoral''cyan''orange''blue'

fig, ax = plt.subplots()
ax.pie(sizes, explode=(00.10.10.10.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()

image-20240822125313044

保存Matplot图像为PNG格式

答案很简单。您可以使用 savefig() 函数将此图表保存到您的计算机上。

banks = ["SBI""Axis Bank""Yes Bank""Bank of Baroda""HDFC Bank"]
sizes = [2172515]
colors = ['brown''lightcoral''cyan''orange''blue']

fig, ax = plt.subplots()
patches, texts, autotexts = ax.pie(sizes, explode=(00.10.10.10.1), colors=colors,
                                   labels=banks, autopct='%1.1f%%', shadow=True, startangle=90)

# Add legend
ax.legend(patches, banks, loc="upper left", bbox_to_anchor=(10.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()

image-20240822125507030

结束语

通过本指南,我们已经深入探索了 Matplotlib 的各种功能,从基本的折线图到复杂的子图和自定义饼图。无论您是初学者还是有经验的用户,相信通过这些例子和代码实践,您已经掌握了如何使用 Matplotlib 来创建美观且具有信息量的数据可视化图表。继续探索和实践,您的数据可视化技能将会越来越强大!

机器学习实战
多名大厂算法工程师共同运营,主要专注机器学习算法、深度学习算法、计算机视觉等领域技术干货分享,一天进步一点点
 最新文章