Python画散点图:如何使用Matplotlib绘制散点图?

2021年9月10日21:57:14 发表评论 7,381 次浏览

Python如何画散点图散点图是一种图表,其中两个变量的值沿两个轴绘制。它是一种最基本的绘图类型,可帮助您可视化两个变量之间的关系。

Python画散点图教程基本概念

  1. 什么是散点图?
  2. python中的基本散点图
  3. 与散点图的相关性
  4. 更改点组的颜色
  5. 更改颜色和标记
  6. 散点图与线性拟合图使用 seaborn
  7. 使用 seaborn 绘制带直方图的散点图
  8. 气泡图
  9. 使用 mtcars 数据集进行探索性分析
    • 多行最佳拟合
    • 调整不同类别的颜色和样式
    • 散点图中的文本注释
    • 带有分类变量的气泡图
    • 分类图

什么是散点图?

Python如何画散点图?什么是散点图?散点图是沿两个轴的两组数据的图形。它用于可视化两个变量之间的关系。

如果沿 Y 轴的值似乎随着 X 轴的增加(或减少)而增加,则可能表示正(或负)线性关系。而如果点是随机分布的,没有明显的模式,则可能表明缺乏依赖关系。

Matplotlib绘制散点图中,散点图可以使用pyplot.plot()pyplot.scatter(). 使用这些函数,您可以向散点图添加更多功能,例如更改点的大小、颜色或形状。

那么plt.scatter()plt.plot()有什么不一样?

这两个函数之间的区别是:pyplot.plot()你申请的任何属性(颜色,形状,点的大小),就可以在所有点,而在pyplot.scatter()应用你必须在每个点的外观更多的控制。

也就是说,plt.scatter()您可以根据另一个变量来改变每个点(数据点)的颜色、形状和大小。或者甚至是相同的变量(y)。而使用pyplot.plot(),您设置的属性将应用于图表中的所有点。

首先,我将导入我将使用的库。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
plt.rcParams.update({'figure.figsize':(10,8), 'figure.dpi':100})

该函数用于更改绘图图形plt.rcParams.update()的默认参数。

Python画散点图教程:基本散点图

首先,让我们使用np.random.randint(). 您需要指定编号。您需要作为参数的点数。

您还可以指定您需要的随机变量的下限和上限。

然后使用该plt.scatter()函数使用 matplotlib 绘制散点图。您需要指定变量 x 和 y 作为参数。

plt.title() 用于为您的情节设置标题。

plt.xlabel() 用于标记 x 轴。

plt.ylabel() 用于标记 y 轴。

# Simple Scatterplot
x = range(50)
y = range(50) + np.random.randint(0,30,50)
plt.scatter(x, y)
plt.rcParams.update({'figure.figsize':(10,8), 'figure.dpi':100})
plt.title('Simple Scatter plot')
plt.xlabel('X - value')
plt.ylabel('Y - value')
plt.show()
Python画散点图:如何使用Matplotlib绘制散点图?

您可以看到点之间存在正线性关系。也就是说,随着 X 的增加,Y 也会增加,因为 Y 实际上只是 X + random_number。

如果您希望点的颜色根据 Y 的值(或其他相同大小的变量)而变化,请使用c参数指定每个点应采用的颜色。

您还可以提供与 X 相同大小的不同变量。

# Simple Scatterplot with colored points
x = range(50)
y = range(50) + np.random.randint(0,30,50)
plt.rcParams.update({'figure.figsize':(10,8), 'figure.dpi':100})
plt.scatter(x, y, c=y, cmap='Spectral')
plt.colorbar()
plt.title('Simple Scatter plot')
plt.xlabel('X - value')
plt.ylabel('Y - value')
plt.show()
Python画散点图:如何使用Matplotlib绘制散点图?
Matplotlib绘制散点图

让我们创建一个关系呈指数增长的数据集并可视化绘图。

# Scatterplot of non-random vzriables
x=np.arange(1,10,0.2)
y= np.exp(x)
plt.scatter(x,y)
plt.rcParams.update({'figure.figsize':(10,8), 'figure.dpi':100})
plt.title('Exponential Relation dataset')
plt.show()
Python画散点图:如何使用Matplotlib绘制散点图?
Python如何画散点图

np.arrange(lower_limit, upper_limit, interval)用于创建下限和上限之间的数据集,步长为“间隔”编号。点数。

现在您可以看到 x 轴和 y 轴之间存在指数关系。

Python如何画散点图?与散点图的相关性

1) 如果 y 的值随着 x 的值增加,那么我们可以说变量具有正相关

2) 如果 y 的值随着 x 的值而减小,那么我们可以说变量具有负相关

3) 如果 y 的值独立于 x 随机变化,则称其相关性为零

# Scatterplot and Correlations
# Data
x=np.random.randn(100)
y1= x*5 +9 
y2= -5*x
y3=np.random.randn(100)

# Plot
plt.rcParams.update({'figure.figsize':(10,8), 'figure.dpi':100})
plt.scatter(x, y1, label=f'y1 Correlation = {np.round(np.corrcoef(x,y1)[0,1], 2)}')
plt.scatter(x, y2, label=f'y2 Correlation = {np.round(np.corrcoef(x,y2)[0,1], 2)}')
plt.scatter(x, y3, label=f'y3 Correlation = {np.round(np.corrcoef(x,y3)[0,1], 2)}')

# Plot
plt.title('Scatterplot and Correlations')
plt.legend()
plt.show()
Python画散点图:如何使用Matplotlib绘制散点图?

在上图中,您可以看到蓝线表示正相关,橙色线表示负相关,绿点表示与 x 值无关(独立随机变化)。

更改点组的颜色

使用该color ='__'命令更改颜色以表示散点图。

# Scatterplot - Color Change
x = np.random.randn(50)
y1 = np.random.randn(50)
y2= np.random.randn(50)

# Plot
plt.scatter(x,y1,color='blue')
plt.scatter(x,y2,color= 'red')
plt.rcParams.update({'figure.figsize':(10,8), 'figure.dpi':100})

# Decorate
plt.title('Color Change')
plt.xlabel('X - value')
plt.ylabel('Y - value')
plt.show()
Python画散点图:如何使用Matplotlib绘制散点图?

Python画散点图教程:更改颜色和标记

使用该命令更改散点图中的标记类型。marker =_____['.','o','v','^','>','<','s','p','*','h','H','D',' d','1','',''] – 这些是可用于绘图的标记类型。

# Scatterplot of different distributions. Color and Shape of Points.
x = np.random.randn(500)
y1 = np.random.randn(500)
y2 = np.random.chisquare(10, 500)
y3 = np.random.poisson(5, 500)

# Plot
plt.rcParams.update({'figure.figsize':(10,8), 'figure.dpi':100})
plt.scatter(x,y1,color='blue', marker= '*', label='Standard Normal')
plt.scatter(x,y2,color= 'red', marker='v', label='Chi-Square')
plt.scatter(x,y3,color= 'green', marker='.', label='Poisson')


# Decorate
plt.title('Distributions: Color and Shape change')
plt.xlabel('X - value')
plt.ylabel('Y - value')
plt.legend(loc='best')
plt.show()
Python画散点图:如何使用Matplotlib绘制散点图?

散点图与线性拟合图使用 Seaborn

让我们尝试使用seaborn 中的lmplot()函数来拟合数据集以获得最佳拟合线。

让我们使用 mtcars 数据集。

您可以从给定的地址下载数据集:https : //www.kaggle.com/ruiromanini/mtcars/download

Matplotlib绘制散点图:现在让我们尝试一下mpgdisplcolumn之间是否存在线性拟合。

# Linear - Line of best fit
import seaborn as sns
url = 'https://gist.githubusercontent.com/seankross/a412dfbd88b3db70b74b/raw/5f23f993cd87c283ce766e7ac6b329ee7cc2e1d1/mtcars.csv'
df=pd.read_csv(url)
plt.rcParams.update({'figure.figsize':(10,8), 'figure.dpi':100})
sns.lmplot(x='mpg', y='disp', data=df)
plt.title("Scatter Plot with Linear fit");
Python画散点图:如何使用Matplotlib绘制散点图?

您可以看到我们在 2 列之间得到了负相关。

# Scatter Plot with lowess line fit
url = 'https://gist.githubusercontent.com/seankross/a412dfbd88b3db70b74b/raw/5f23f993cd87c283ce766e7ac6b329ee7cc2e1d1/mtcars.csv'
df=pd.read_csv(url)
sns.lmplot(x='mpg', y='disp', data=df, lowess=True) 
plt.title("Scatter Plot with Lowess fit");
Python画散点图:如何使用Matplotlib绘制散点图?

Python画散点图:使用 seaborn 绘制带直方图的散点图

使用 seaborn 中的联合绘图函数将散点图以及 x 和 y 值的分布表示为直方图。

使用sns.jointplot()带有 x、y 和 datset 作为参数的函数。

import seaborn as sns
x = np.random.randn(100)
y1 = np.random.randn(100)
plt.rcParams.update({'figure.figsize':(10,8), 'figure.dpi':100})
sns.jointplot(x=x,y=y1);
Python画散点图:如何使用Matplotlib绘制散点图?

如您所见,我们还得到了 x 和 y 值的分布图。

气泡图

气泡图是添加了第三维的散点图:附加变量的值通过点的大小表示。

您需要在散点图中添加另一个s表示点大小的命令。

# Bubble Plot. The size of points changes based on a third varible.
x = np.random.rand(100)
y = np.random.rand(100)
s = np.random.rand(100)*200
plt.scatter(x, y, s=s,color='red')
plt.show()
Python画散点图:如何使用Matplotlib绘制散点图?

气泡的大小代表第三个维度的值,如果气泡的大小大于则表示该点的z值较大。

mtcars 数据集的探索性分析

Python如何画散点图?mtcars 数据集包含多个车型的里程和车辆规格。数据集可以在这里下载。

探索性分析的目的是了解各种车辆规格与里程之间的关系。

df=pd.read_csv("mtcars.csv")
df.head()
Python画散点图:如何使用Matplotlib绘制散点图?

您可以看到数据集包含有关汽车的不同信息。

首先,让我们看到一个散点图,看之间的分布mpgdisp及其histogramic分布。你可以通过使用seaborn 中的jointplot()函数来做到这一点。

# joint plot for finding distribution
sns.jointplot(x=df["mpg"], y=df["disp"],color='red', kind='scatter')
<seaborn.axisgrid.JointGrid at 0x7fbf16fcc5f8>
Python画散点图:如何使用Matplotlib绘制散点图?

多行最佳拟合

如果您需要对 x 和 y 之间的多个特征类别进行线性回归拟合,就像在这种情况下一样,我将进一步划分类别,gear并尝试相应地拟合线性线。为此,请使用lmplot()函数中的hue=参数。

# Linear - Line of best fit
import seaborn as sns
df=pd.read_csv('mtcars.csv')
plt.rcParams.update({'figure.figsize':(10,8), 'figure.dpi':100})
sns.lmplot(x='mpg', y='disp',hue='gear', data=df);
Python画散点图:如何使用Matplotlib绘制散点图?

看到该函数为数据集中的 3 类齿轮拟合了 3 条不同的线。

Python画散点图教程:调整不同类别的颜色和样式

我根据不同的齿轮类别拆分了数据集。然后我使用该scatter()函数分别绘制它们。

# Color and style change according to category
# Data
df=pd.read_csv('mtcars.csv')
df1=df[df['gear']==3]
df2=df[df['gear']==4]
df3=df[df['gear']==5]

# PLOT
plt.scatter(df1['mpg'],df1['disp'],color='blue', marker= '*', label='gear=3')
plt.scatter(df2['mpg'],df2['disp'],color= 'red', marker='v', label='gear=4')
plt.scatter(df3['mpg'],df3['disp'],color= 'green', marker='.', label='gear=5')
plt.legend()
<matplotlib.legend.Legend at 0x7fbf171b59b0>
Python画散点图:如何使用Matplotlib绘制散点图?

散点图中的文本注释

如果您需要在图形中添加任何文本,请使用带有文本和坐标的函数plt.text()作为参数添加文本。

# Text annotation in scatter plot
df=pd.read_csv('mtcars.csv')
df1=df[df['gear']==3]
df2=df[df['gear']==4]
df3=df[df['gear']==5]

# Plot
plt.scatter(df1['mpg'],df1['disp'],color='blue', marker= '*', label='gear=3')
plt.scatter(df2['mpg'],df2['disp'],color= 'red', marker='v', label='gear=4')
plt.scatter(df3['mpg'],df3['disp'],color= 'green', marker='.', label='gear=5')
plt.legend()

# Text Annotate
plt.text(21.5+0.2, 255, "gear=3", horizontalalignment='left', size='medium', color='blue', weight='semibold')
plt.text(26+0.2, 120, "gear=5", horizontalalignment='left', size='medium', color='green', weight='semibold')
plt.text(24.5+0.2, 145, "gear=4", horizontalalignment='left', size='medium', color='red', weight='semibold')
Text(24.7, 145, 'gear=4')
Python画散点图:如何使用Matplotlib绘制散点图?

带有分类变量的气泡图

Python如何画散点图?通常,您将使用 2 个变量来绘制散点图(x 和 y),然后我添加了另一个分类变量df['carb'],该变量将由点的颜色隐含,我还添加了另一个变量df['wt'],其值将根据每个变量的强度隐含颜色。

# Bubble Plot
url = 'https://gist.githubusercontent.com/seankross/a412dfbd88b3db70b74b/raw/5f23f993cd87c283ce766e7ac6b329ee7cc2e1d1/mtcars.csv'
df=pd.read_csv(url)

# Plot
plt.scatter(df['mpg'],df['disp'],alpha =0.7, s=100* df['wt'], c=df['carb'],cmap='plasma')

# Decorate
plt.xlabel('MPG')
plt.ylabel('DISPLACEMENT');
plt.title('Bubble Plot')
plt.legend();
No handles with labels found to put in legend.
Python画散点图:如何使用Matplotlib绘制散点图?

我绘制了mpg值与disp值的关系图,并根据值将它们分成不同的颜色carb,每个气泡的大小代表了wt值。

alpha参数用于改变绘图的颜色强度。aplha 越多,颜色强度就越大。

分类图

# Categorical Plot
sns.catplot(x="cyl", y="disp", hue="gear", kind="swarm", data=df);
plt.title('Categorical Plot')
Python画散点图:如何使用Matplotlib绘制散点图?
Matplotlib绘制散点图

sns.catplot() 用于访问多个轴级函数,这些函数使用几种视觉表示形式之一显示数值与一个或多个分类变量之间的关系。

使用该hue=命令将数据进一步拆分为其他类别。

以上就是Python画散点图教程的全部内容,希望这些内容可以帮助到你,如果有任何问题,你可以在下方评论。

木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: