matplotlib 基本绘图

本文详细介绍使用Matplotlib进行各种复杂图表绘制的方法,包括异常值过滤、箱线图、图片处理、线条属性设置、自定义刻度、图例与注解、坐标轴调整、直方图、条形图、饼图、图形填充、散点图、等高线图、3D图形绘制等,是数据可视化领域的实用指南。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#coding=utf-8
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import scipy.misc
from PIL import Image
import matplotlib as mpl
from mpl_toolkits.mplot3d import Axes3D
np.set_printoptions(suppress=True)

'''
#MDA过滤异常值
def is_outlier(arr,threshold=3.5):  #数据整体符合标准正太分布
    if len(arr.shape)==1:
        arr = arr[:,None]
    median = np.median(arr)
    diff = np.sum((arr-median)**2,axis=-1)
    diff = np.sqrt(diff)
    MDA = np.median(diff)
    final_score = 0.6745*diff/MDA
    #print (final_score)
    return final_score>threshold

#np.random.seed(4)
#x = np.random.randn(100) #生成100个近似标准正太分布数据
#x = np.random.randint(4,100,10) 
x = np.random.random(100) #生成100个0~1之间的浮点数
x = np.r_[x,5,4,1,2]
filters = x[~is_outlier(x)]
'''

#绘制箱线图剔除离散点
'''
plt.boxplot(x,0,'gx')  #带x的就是离群值
plt.show()
'''

#打开图片
'''
pic = Image.open("Koala.jpg")
#转化为矩阵
pic_arr = np.array(pic.getdata()).reshape(pic.size[1],pic.size[0],3)
plt.imshow(pic_arr)
plt.colorbar()
plt.show()
'''    
    
#线条属性
'''
y = [1,4,3,2,5,7]
plt.plot(y,c='red',lw=2.2,label='test',marker='D',ls='steps')
#ls有'--','-.',':','steps'
#marker有'>','<','+','*','o','D','h','_','8','p',','
plt.show()    
'''

#自定义刻度
'''
axis = plt.gca()
axis.locator_params(tight=True,nbins=20)
plt.plot(np.random.normal(10,.1,100))
plt.show()
'''

#添加图例和注解
'''
x1 = np.random.normal(30,3,100)
x2 = np.random.normal(20,2,100)
x3 = np.random.normal(10,3,100)
plt.plot(x1,label='plot1')
plt.plot(x2,label='plot2')
plt.plot(x3,label='plot3')
#plt.legend(loc=0) #自动确定图例的位置
plt.legend(bbox_to_anchor=(0,1.02,1,0.102),loc=3,ncol=3,mode='expand')
#bbox_to_anchor是比例(0*xmax,1.02*ymax,1*xmax,0.102*ymax)
#为数据点设立注释
plt.annotate("string_value", (55,20),xytext=(5,38),arrowprops=dict(arrowstyle='->'))
plt.show()
'''

#将坐标轴移到中心
'''
x = np.linspace(-np.pi,np.pi,100)
y = np.sin(x)
axis = plt.gca()
axis.spines['right'].set_color('none')
axis.spines['top'].set_color('none')
axis.spines['bottom'].set_position(('data',0))
axis.spines['left'].set_position(('data',0))
axis.xaxis.set_ticks_position('bottom')
axis.yaxis.set_ticks_position('left')
plt.plot(x,y,label='sin')
plt.legend(loc=0)
plt.show()
'''
#绘制直方图
'''
x = np.random.normal(100,15,10000)
plt.hist(x,bins=50,alpha=0.3)
plt.show()
'''
#绘制条形图
'''
y = np.random.randint(3,10,8)
plt.barh(np.arange(8),y)
plt.yticks(np.arange(3), labels=['a','b','c'])
plt.show()
'''

#绘制饼图
'''
x = np.random.randint(20,100,5)
labels = ['a','b','c','d','e']
explode = [0.1,0,0,0,0]
plt.pie(x,explode=explode,labels=labels,autopct='%1.3f%%')
plt.show()
'''

#图形填充
'''
x = np.linspace(0,10,1000)
y1 = np.sin(x)
y2 = 1.5*np.cos(x)
plt.plot(x,y1,c='r',ls='--')
plt.plot(x,y2,c='b',ls='-.')
plt.fill_between(x, y1, y2, where=y2-0.5>y1,facecolor='darkblue')
plt.fill_between(x, y1, y2, where=y2<y1,facecolor='deeppink')
plt.show()
'''

#绘制散点图
'''
x = np.random.randn(1000)
y2 = 1.2+np.exp(x)
plt.scatter(x,y2,color='indigo',alpha=1,edgecolors='red')
plt.text(-1,4,"text",size=40)
plt.show()
'''

#绘制等高线图
'''
x = np.arange(-1.5,1.5,0.1)
y = np.arange(-1.5,1.5,0.1)
X,Y = np.meshgrid(x,y) #网格点
z = (1-X**2+Y**2)*np.exp((-Y)**3/3)
cs = plt.contour(z,np.arange(-1,1.5,0.3))
plt.clabel(cs,fmt='%1.1f',inline=True,fontsize=10)
plt.colorbar(cs)
plt.show()
'''

#绘制3D表面图形
'''
fig = plt.figure()
ax = fig.gca(projection="3d")
x = np.arange(-1.5,1.5,0.1)
y = np.arange(-1.5,1.5,0.1)
X,Y = np.meshgrid(x,y) #网格点
z = np.power(X,2)+np.power(Y,2)
ax.plot_surface(X,Y,z, cmap=plt.cm.coolwarm)
#ax.plot_wireframe(X,Y,z, cmap=plt.cm.coolwarm)
plt.show()
'''

#绘制3d散点图
'''
fig = plt.figure()
ax = fig.gca(projection='3d')
x=[1,3,5,8]
y=[2,8,9,6]
z=[2,4,5,3]
ax.plot(x,y,z)
#ax.scatter(x,y,z)
plt.show()
'''

#平面
'''
fig = plt.figure()
ax = fig.gca(projection="3d")
x = np.arange(1,10,0.1)
y = np.arange(1,10,0.1)
X,Y = np.meshgrid(x,y) #网格点
z = -(X/3-2/3*Y-8/3)
#也可以这样
#ax.plot(X.ravel(),Y.ravel(),z.ravel())
#ax.plot_wireframe(X,Y,z, cmap=plt.cm.coolwarm)
plt.show()
'''

#直线方程
'''
fig = plt.figure()
ax = fig.gca(projection="3d")
x = np.arange(1,10,0.1)
y = -(x-1)/4
z = -3*(x-1)/4-2
ax.plot(x,y,z)
#ax.plot_wireframe(X,Y,z, cmap=plt.cm.coolwarm)
plt.show()
'''

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值