Python绘制散点图的教程详解

 更新时间:2022年03月16日 15:23:02   作者:Vertira  
散点图是指在回归分析中,数据点在直角坐标系平面上的分布图,散点图表示因变量随自变量而变化的大致趋势,据此可以选择合适的函数对数据点进行拟合。本文将用Python绘制散点图,需要的可以参考一下

少废话,直接上代码 

import matplotlib.pyplot as plt
import numpy as np
# 1. 首先是导入包,创建数据
n = 10
x = np.random.rand(n) * 2# 随机产生10个0~2之间的x坐标
y = np.random.rand(n) * 2# 随机产生10个0~2之间的y坐标
# 2.创建一张figure
fig = plt.figure(1)
# 3. 设置颜色 color 值【可选参数,即可填可不填】,方式有几种
# colors = np.random.rand(n) # 随机产生10个0~1之间的颜色值,或者
colors = ['r', 'g', 'y', 'b', 'r', 'c', 'g', 'b', 'k', 'm']  # 可设置随机数取
# 4. 设置点的面积大小 area 值 【可选参数】
area = 20*np.arange(1, n+1)
# 5. 设置点的边界线宽度 【可选参数】
widths = np.arange(n)# 0-9的数字
# 6. 正式绘制散点图:scatter
plt.scatter(x, y, s=area, c=colors, linewidths=widths, alpha=0.5, marker='o')
# 7. 设置轴标签:xlabel、ylabel
#设置X轴标签
plt.xlabel('X坐标')
#设置Y轴标签
plt.ylabel('Y坐标')
# 8. 设置图标题:title
plt.title('test绘图函数')
# 9. 设置轴的上下限显示值:xlim、ylim
# 设置横轴的上下限值
plt.xlim(-0.5, 2.5)
# 设置纵轴的上下限值
plt.ylim(-0.5, 2.5)
# 10. 设置轴的刻度值:xticks、yticks
# 设置横轴精准刻度
plt.xticks(np.arange(np.min(x)-0.2, np.max(x)+0.2, step=0.3))
# 设置纵轴精准刻度
plt.yticks(np.arange(np.min(y)-0.2, np.max(y)+0.2, step=0.3))
# 也可按照xlim和ylim来设置
# 设置横轴精准刻度
plt.xticks(np.arange(-0.5, 2.5, step=0.5))
# 设置纵轴精准刻度
plt.yticks(np.arange(-0.5, 2.5, step=0.5))
 
# 11. 在图中某些点上(位置)显示标签:annotate
# plt.annotate("(" + str(round(x[2], 2)) + ", " + str(round(y[2], 2)) + ")", xy=(x[2], y[2]), fontsize=10, xycoords='data')# 或者
plt.annotate("({0},{1})".format(round(x[2],2), round(y[2],2)), xy=(x[2], y[2]), fontsize=10, xycoords='data')
# xycoords='data' 以data值为基准
# 设置字体大小为 10
# 12. 在图中某些位置显示文本:text
plt.text(round(x[6],2), round(y[6],2), "good point", fontdict={'size': 10, 'color': 'red'})  # fontdict设置文本字体
# Add text to the axes.
# 13. 设置显示中文
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
# 14. 设置legend,【注意,'绘图测试':一定要是可迭代格式,例如元组或者列表,要不然只会显示第一个字符,也就是legend会显示不全】
plt.legend(['绘图测试'], loc=2, fontsize=10)
# plt.legend(['绘图测试'], loc='upper left', markerscale = 0.5, fontsize = 10) #这个也可
# markerscale:The relative size of legend markers compared with the originally drawn ones.
# 15. 保存图片 savefig
plt.savefig('test_xx.png', dpi=200, bbox_inches='tight', transparent=False)
# dpi: The resolution in dots per inch,设置分辨率,用于改变清晰度
# If *True*, the axes patches will all be transparent
# 16. 显示图片 show
plt.show()

scatter主要参数:

def scatter(self, x, y, s=None, c=None, marker=None, cmap=None, norm=None,
                vmin=None, vmax=None, alpha=None, linewidths=None,
                verts=None, edgecolors=None,
                **kwargs):
        """
        A scatter plot of *y* vs *x* with varying marker size and/or color.
        Parameters
        ----------
        x, y : array_like, shape (n, )
            The data positions.
        s : scalar or array_like, shape (n, ), optional
            The marker size in points**2.
            Default is ``rcParams['lines.markersize'] ** 2``.
        c : color, sequence, or sequence of color, optional, default: 'b'
            The marker color. Possible values:
            - A single color format string.
            - A sequence of color specifications of length n.
            - A sequence of n numbers to be mapped to colors using *cmap* and
              *norm*.
            - A 2-D array in which the rows are RGB or RGBA.
            Note that *c* should not be a single numeric RGB or RGBA sequence
            because that is indistinguishable from an array of values to be
            colormapped. If you want to specify the same RGB or RGBA value for
            all points, use a 2-D array with a single row.
        marker : `~matplotlib.markers.MarkerStyle`, optional, default: 'o'
            The marker style. *marker* can be either an instance of the class
            or the text shorthand for a particular marker.
            See `~matplotlib.markers` for more information marker styles.
        cmap : `~matplotlib.colors.Colormap`, optional, default: None
            A `.Colormap` instance or registered colormap name. *cmap* is only
            used if *c* is an array of floats. If ``None``, defaults to rc
            ``image.cmap``.
        alpha : scalar, optional, default: None
            The alpha blending value, between 0 (transparent) and 1 (opaque).
        linewidths : scalar or array_like, optional, default: None
            The linewidth of the marker edges. Note: The default *edgecolors*
            is 'face'. You may want to change this as well.
            If *None*, defaults to rcParams ``lines.linewidth``.

设置legend,【注意,'绘图测试’:一定要是可迭代格式,例如元组或者列表,要不然只会显示第一个字符,也就是legend会显示不全】

plt.legend(['绘图测试'], loc=2, fontsize = 10)
# plt.legend(['绘图测试'], loc='upper left', markerscale = 0.5, fontsize = 10) #这个也可
#  markerscale:The relative size of legend markers compared with the originally drawn ones.

其参数loc对应为:

运行结果:

补充

除了二维的散点图,Python还能绘制三维的散点图,下面的示例代码

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
 
# 随机种子
np.random.seed(1)
 
 
def randrange(n, vmin, vmax):
    '''
    使数据分布均匀(vmin, vmax).
    '''
    return (vmax - vmin)*np.random.rand(n) + vmin
 
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')  # 可进行多图绘制
 
n = 500
 
# 对于每一组样式和范围设置,在由x在[23,32]、y在[0,100]、
# z在[zlow,zhigh]中定义的框中绘制n个随机点
for m, zlow, zhigh in [('o', -50, -25), ('^', -30, -5)]:
    xs = randrange(n, 23, 32)
    ys = randrange(n, 0, 100)
    zs = randrange(n, zlow, zhigh)
    ax.scatter(xs, ys, zs, marker=m)  # 绘图
 
# X、Y、Z的标签
ax.set_xlabel('X Label')
ax.set_ylabel('Y Label')
ax.set_zlabel('Z Label')
 
plt.show()

输出结果:

到此这篇关于Python绘制散点图的教程详解的文章就介绍到这了,更多相关Python散点图内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python @property使用方法解析

    Python @property使用方法解析

    这篇文章主要介绍了Python @property使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • python基于plotly实现画饼状图代码实例

    python基于plotly实现画饼状图代码实例

    这篇文章主要介绍了python基于plotly实现画饼状图代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • pandas 数据类型转换的实现

    pandas 数据类型转换的实现

    这篇文章主要介绍了pandas 数据类型转换的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • Pytorch训练过程出现nan的解决方式

    Pytorch训练过程出现nan的解决方式

    今天小编就为大家分享一篇Pytorch训练过程出现nan的解决方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-01-01
  • Python实现的一个自动售饮料程序代码分享

    Python实现的一个自动售饮料程序代码分享

    这篇文章主要介绍了Python实现的一个自动售饮料程序代码分享,就是用python实现的生活中一种投币式自动售饮料机的内部程序判断代码,需要的朋友可以参考下
    2014-08-08
  • python实现sqlalchemy的使用概述

    python实现sqlalchemy的使用概述

    SQLAlchemy是Python中最有名的ORM工具,特点是操纵Python对象而不是SQL查询,也就是在代码层面考虑的是对象,而不是SQL,体现的是一种程序化思维,这样使得Python程序更加简洁易懂,具体内容详情跟随小编一起看看吧
    2021-08-08
  • Python3中的map函数调用后内存释放问题

    Python3中的map函数调用后内存释放问题

    这篇文章主要介绍了Python3中的map函数调用后内存释放问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02
  • Python自然语言处理停用词过滤实例详解

    Python自然语言处理停用词过滤实例详解

    这篇文章主要为大家介绍了Python自然语言处理停用词过滤实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-01-01
  • Pytorch中transforms.Resize()的简单使用

    Pytorch中transforms.Resize()的简单使用

    这篇文章主要介绍了Pytorch中transforms.Resize()的简单使用方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • Python将多个excel文件合并为一个文件

    Python将多个excel文件合并为一个文件

    这篇文章主要为大家详细介绍了Python将多个excel文件合并为一个文件,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01

最新评论