python初学者画图_【学习】python画图总结

一、基础

一般画图的逻辑包括:

图片大小

是否分图

图表形式(什么图、里面的画线格式等)

图标题

横纵坐标轴

横纵坐标刻度

图例

网格

颜色

text

1.1 基础设置

plt.figure(figsize=(10,6)) #设置图表大小

# 画图

x = range(11)

y1 = np.arange(0,1.1,0.1)

y2 = np.arange(0,2.1,0.2)

plt.plot(x,y1,label='y1')

plt.plot(x,y2,label='y2',linestyle='--')

#label设置

plt.title('Interesting Graph - Check it out') # 图名

plt.xlabel('Plot Number') # x轴标签

plt.ylabel('Important var') # y轴标签

plt.legend(loc = 'upper right') # 显示图例,loc表示位置

# 'best' : 0, (only implemented for axes legends)(自适应方式)

# 'upper right' : 1,

# 'upper left' : 2,

# 'lower left' : 3,

# 'lower right' : 4,

# 'right' : 5,

# 'center left' : 6,

# 'center right' : 7,

# 'lower center' : 8,

# 'upper center' : 9,

# 'center' : 10,

# lim和ticks会互相覆盖,最终的尺度会以最后一个设置为标准

plt.xticks(range(11),labels=["%.1f" %i for i in range(11)],rotation = 90) # 设置x刻度和标签,旋转角度

plt.yticks([0,0.2,0.4,0.6,0.8,1.0,1.2]) # 设置y刻度

plt.xlim([0,10]) # x轴边界

plt.ylim([0,1]) # y轴边界

# 刻度显示

plt.tick_params(axis='x',which = 'major',direction='in', length=6, width=2, colors='black')

plt.tick_params(axis='y',direction='out', length=6, width=2, colors='black')

# 显示网格

# linestyle:线型

# color:颜色

# linewidth:宽度

# axis:x,y,both,显示x/y/两者的格网

plt.grid(True, linestyle = "--",color = "gray", linewidth = "0.5",axis = 'both')

# 显示图标

plt.text(x=5, y=0.5,s='text',ha='center', va='center',fontsize=15, rotation=90)

3882072a96d3

image.png

如果要设置主刻度和次刻度,比较麻烦,必须配合matplotlib.ticker使用。最终的参数用plt.tick_params来设置显示格式

from matplotlib.ticker import MultipleLocator, FormatStrFormatter

xmajorLocator = MultipleLocator(0.5) # 将x主刻度标签设置为10的倍数

xmajorFormatter = FormatStrFormatter('%.1f') # 设置x轴标签文本的格式

xminorLocator = MultipleLocator(0.1) # 将x轴次刻度标签设置为5的倍数

ymajorLocator = MultipleLocator(0.1) # 将y轴主刻度标签设置为0.5的倍数

ymajorFormatter = FormatStrFormatter('%.1f') # 设置y轴标签文本的格式

yminorLocator = MultipleLocator(0.1) # 将此y轴次刻度标签设置为0.1的倍数

# plt.gca()也可以用ax1来代替

plt.gca().xaxis.set_major_locator(xmajorLocator) # 设置x轴主刻度

plt.gca().xaxis.set_major_formatter(xmajorFormatter) # 设置x轴标签文本格式

plt.gca().xaxis.set_minor_locator(xminorLocator) # 设置x轴次刻度

plt.gca().yaxis.set_major_locator(ymajorLocator) # 设置y轴主刻度

plt.gca().yaxis.set_major_formatter(ymajorFormatter) # 设置y轴标签文本格式

plt.gca().yaxis.set_minor_locator(yminorLocator) # 设置y轴次刻度

plt.gca().xaxis.grid(True, which='major') #x坐标轴的网格使用主刻度

plt.gca().xaxis.grid(True, which='minor') #x坐标轴的网格使用主刻度

plt.gca().yaxis.grid(True, which='minor') #y坐标轴的网格使用次刻度

plt.gca().yaxis.grid(True, which='major') #y坐标轴的网格使用次刻度

3882072a96d3

image.png

1.2 多图

x= np.linspace(0,2*np.pi,500)

y1 = np.sin(x)

y2 = np.cos(x)

y3 = np.sin(x*x)

plt.figure(figsize=(10,6)) #设置图表大小

ax1 = plt.subplot(2,2,1)

ax2 = plt.subplot(2,2,2)

ax3 = plt.subplot(2,1,2)

# 选择ax1

plt.sca(ax1)

plt.plot(x,y1,color='red')

plt.title('Graph1') # 图名

# 选择ax2

plt.sca(ax2)

plt.plot(x,y2,color='blue',linestyle='--')

plt.title('Graph2') # 图名

# 选择ax3

plt.sca(ax3)

plt.plot(x,y3,'g--',label='y3')

plt.title('Graph3') # 图名

plt.legend()

3882072a96d3

image.png

1.3 颜色

3882072a96d3

image.png

自己搭的10色系

colors =['lightcoral', 'lightseagreen', 'cornflowerblue', 'orange','dodgerblue', 'tomato','mediumslateblue', 'gold', 'dimgray', 'peru']

plt.figure(figsize=(10,6))

plt.bar(range(10),range(1,11),color= colors)

3882072a96d3

image.png

二、常用图(基于seaborn)

直线图

import pandas as pd

import numpy as np

import matplotlib.pyplot as plt

import seaborn as sns

sns.set(style='darkgrid')

# Seaborn有五个预设好的主题: darkgrid , whitegrid , dark , white ,和 ticks 默认: darkgrid

# 用默认的格式可能存在不显示ticks的问题,如果要显示ticks,最好不要用预设主题

plt.figure(figsize=(10,6))

plt.hlines(5,0,10)

plt.vlines(5,0,10)

plt.xticks(range(11))

plt.xlim(0,10)

plt.ylim(0,10)

3882072a96d3

image.png

柱状图

plt.figure(figsize=(15,12))

ax1 = plt.subplot(2,2,1)

ax2 = plt.subplot(2,2,2)

ax3 = plt.subplot(2,1,2)

# 一般柱状图

plt.sca(ax1)

bar_width = 0.8

plt.bar(range(5),range(1,6),color= colors,width=bar_width)

plt.xticks(ticks=range(5), labels=('A','B','C','D','E'))

for i in range(5): #显示数值

plt.text(i,i+1.1,i+1,ha='center', va='center',fontsize=15,)

# 双柱状图

plt.sca(ax2)

bar_width = 0.4

plt.bar(np.arange(5)-bar_width/2,range(1,6),color='skyblue',width=bar_width,label='y1')

plt.bar(np.arange(5)+bar_width/2,range(4,9),color='orange',width=bar_width,label='y2')

plt.xticks(ticks=range(5), labels=('A','B','C','D','E'))

plt.legend()

for i in range(5): #显示数值

plt.text(i-bar_width/2,i+1.2,i+1,ha='center', va='center',fontsize=15,)

plt.text(i+bar_width/2,i+4.2,i+4,ha='center', va='center',fontsize=15,)

# 叠加柱状图

plt.sca(ax3)

bar_width = 0.8

plt.bar(np.arange(5),range(4,9),color='orange',width=bar_width,label='y2',alpha=0.5)

plt.bar(np.arange(5),range(1,6),color='skyblue',width=bar_width,label='y1',alpha=0.5)

plt.xticks(ticks=range(5), labels=('A','B','C','D','E'))

plt.legend()

for i in range(5): #显示数值

plt.text(i,i+1.2,i+1,ha='center', va='center',fontsize=15,)

plt.text(i,i+4.2,i+4,ha='center', va='center',fontsize=15,)

3882072a96d3

image.png

折线图

plt.figure(figsize=(10,6))

plt.plot(range(5),range(1,6),marker='^',linestyle='--',label='y1')

plt.plot(range(5),range(6,1,-1),marker='*',linestyle='-.',label='y2')

plt.legend()

3882072a96d3

image.png

饼图

plt.figure(figsize=(10,10))

plt.pie([1,2,4,5,4],explode=[0.1,0,0.1,0,0],colors=colors,autopct='%1.1f%%',labels=['A','B','C','D','E'],\

labeldistance=1.1,pctdistance=0.5,radius=1)

# labeldistance: 控制labels显示的位置

# pctdistance: 控制百分比显示的位置

# radius: 控制圆半径,会和figsize冲突

plt.legend(fontsize=15)

3882072a96d3

image.png

散点图

tips = sns.load_dataset("tips")

plt.figure(figsize=(15,6))

ax1 = plt.subplot(1,2,1)

ax2 = plt.subplot(1,2,2)

plt.sca(ax1)

sns.scatterplot(x="total_bill", y="tip", size='size',hue='time', data=tips)

plt.legend(loc='upper right')

plt.sca(ax2)

sns.stripplot(x="day", y="total_bill",hue='smoker',order=['Sat','Fri','Sun', 'Thur'], jitter=True, dodge=True, data=tips)

plt.legend(loc='upper right')

# order:用order参数进行筛选分类类别,例如:order=[‘sun’,‘sat’];

# jitter:抖动项,表示抖动程度,可以使float,或者True;

# dodge:重叠区域是否分开,当使用hue时,将其设置为True,将沿着分类轴将不同色调级别的条带分开。

# orient:“v” | “h”,vertical(垂直) 和 horizontal(水平)的意思;

3882072a96d3

image.png

箱线图/小提琴图

tips = sns.load_dataset("tips")

plt.figure(figsize=(15,6))

ax1 = plt.subplot(1,2,1)

ax2 = plt.subplot(1,2,2)

plt.sca(ax1)

sns.boxplot(x="day", y="total_bill", hue="time",data=tips,)

#箱型图是四分位点

plt.sca(ax2)

sns.violinplot(x="day", y="total_bill", hue="sex",data=tips)

3882072a96d3

image.png

直方图

plt.figure(figsize=(10,6))

np.random.seed(666)

x = np.random.randn(1000)

ax = sns.distplot(x,bins=20,hist=True,kde=True)

3882072a96d3

image.png

回归图

plt.figure(figsize=(10,6))

sns.lmplot(x="total_bill", y="tip", hue="smoker", data=tips, legend_out=False, height=6,)

plt.legend(loc='upper right')

#回归图无法调整图片大小,只能用height来设置参数

3882072a96d3

image.png

热力图

plt.figure(figsize=(10,6))

x= np.random.rand(10, 10)

ax = sns.heatmap(x,annot=True,annot_kws={'size':9, 'color':'black'},fmt='.4f',)

3882072a96d3

image.png

组合图

x = np.linspace(0,10)

y = np.linspace(0,10)

z = np.sin(x/3)**2*98

sns.set(style='ticks')

plt.figure(figsize=(10,6))

ax1 = plt.gca()

ax1.plot(x,y, '-', label = 'Quantity 1')

ax2 = ax1.twinx()

ax2.plot(x,z, '-r', label = 'Quantity 2')

ax1.set_xlabel("x [units]")

ax1.set_ylabel(r"Quantity 1")

ax2.set_ylabel(r"Quantity 2")

#图例

handles1, labels1 = ax1.get_legend_handles_labels()

handles2, labels2 = ax2.get_legend_handles_labels()

plt.legend(handles1+handles2, labels1+labels2, loc='upper right')

3882072a96d3

image.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于C++&OPENCV 的全景图像拼接 C++是一种广泛使用的编程语言,它是由Bjarne Stroustrup于1979年在新泽西州美利山贝尔实验室开始设计开发的。C++是C语言的扩展,旨在提供更强大的编程能力,包括面向对象编程和泛型编程的支持。C++支持数据封装、继承和多态等面向对象编程的特性和泛型编程的模板,以及丰富的标准库,提供了大量的数据结构和算法,极大地提高了开发效率。12 C++是一种静态类型的、编译式的、通用的、大小写敏感的编程语言,它综合了高级语言和低级语言的特点。C++的语法与C语言非常相似,但增加了许多面向对象编程的特性,如类、对象、封装、继承和多态等。这使得C++既保持了C语言的低级特性,如直接访问硬件的能力,又提供了高级语言的特性,如数据封装和代码重用。13 C++的应用领域非常广泛,包括但不限于教育、系统开发、游戏开发、嵌入式系统、工业和商业应用、科研和高性能计算等领域。在教育领域,C++因其结构化和面向对象的特性,常被选为计算机科学和工程专业的入门编程语言。在系统开发领域,C++因其高效性和灵活性,经常被作为开发语言。游戏开发领域中,C++由于其高效性和广泛应用,在开发高性能游戏和游戏引擎中扮演着重要角色。在嵌入式系统领域,C++的高效和灵活性使其成为理想选择。此外,C++还广泛应用于桌面应用、Web浏览器、操作系统、编译器、媒体应用程序、数据库引擎、医疗工程和机器人等领域。16 学习C++的关键是理解其核心概念和编程风格,而不是过于深入技术细节。C++支持多种编程风格,每种风格都能有效地保证运行时间效率和空间效率。因此,无论是初学者还是经验丰富的程序员,都可以通过C++来设计和实现新系统或维护旧系统。3

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值