国足踢进世界杯 / 2025-07-11 11:29:20

大家好,又见面了,我是你们的朋友全栈君。

前言因为数据需要用图形来展示。在Excel,matlab,python中,我选择了python。

数学“剑魔”的的时候,我看到有人用Excel生成柱状图之类的,挺好看,但是我不会啊。matlab以前学过一点,但是当前电脑没有这个软件。安装这个软件有些费事。所以干脆选择使用python生成图形。毕竟学习python相较于学习Excel,相对而言,“性价比”高点。🐶

我基本不会python,这是第一篇python。

水水,这浪花可这大~

我目前仅仅需要柱状图.视频:Matplotlib Python 画图教程 (莫烦Python)代码仓库:Python Matplotlib methods and tutorials图形可以分为两部分。一个是外部的整体设置,比如坐标轴的设置,注释,透明度等;一个是内部具体图形,不同图形可能大同小异。

外部设置,是我们需要掌握的内容。内部具体图形的操作,用的时候搜索下就好。

文章目录前言环境一张图一条线两张图两条线一张图两条线:重点柱状图散点图等高线环境vscode的python插件:python 插件

创建一个虚拟环境:虚拟环境和包

一张图一条线开局,一张图一条线,不好玩,算我输。🐶

代码语言:javascript代码运行次数:0运行复制#%%

''' 先来一个最简单:一条线 '''

import matplotlib.pyplot as plt

import numpy as np

x = np.linspace(-1,1,50)

y = 2*x + 1

plt.plot(x,y)

plt.show()两张图两条线代码语言:javascript代码运行次数:0运行复制# %%

''' 我们可以画到不同图中 '''

import matplotlib.pyplot as plt

import numpy as np

x = np.linspace(-1,1,50)

y1 = 2*x +1

y2 = x**2

plt.figure()

plt.plot(x,y1)

plt.figure(num=3,figsize=(8,5))

plt.plot(x,y2)

plt.show()一张图两条线:重点这里是一个重点。

设置线的样式:颜色、宽度、样式显示x轴,y轴的范围x轴,y轴标签更换下标移动x,y轴位置annotation注释添加文本透明度至于添加坐标轴的箭头,我还不知道。代码语言:javascript代码运行次数:0运行复制import matplotlib.pyplot as plt

import numpy as np

# 显示中文

plt.rcParams['font.sans-serif']=['SimHei']

plt.rcParams['axes.unicode_minus']=False

x = np.linspace(-3,3,50)

y1 = 2*x - 1

y2 = x**2

# 一张图

plt.figure()

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

plt.plot(x,y2,label='Quadratic function',color="red",linewidth=1.0,linestyle='--')

# 限制x,y轴的范围,设置标签

plt.xlim((-2,3))

plt.ylim((-2,8))

plt.xlabel("x")

plt.ylabel("y")

# 更换下标

new_ticks = np.linspace(-2,3,10)

plt.xticks(new_ticks)

plt.yticks(range(5), ['cat', 'fish', 'dog$', 'tom', 'jerry'])

# 移动x,y轴位置

# gca = "get current axis"

ax = plt.gca()

ax.spines['right'].set_color('none') # 右边框设置成无颜色

ax.spines['top'].set_color('none') # 上边框设置成无颜色

ax.xaxis.set_ticks_position('bottom') # x轴用下边框代替,默认是这样

ax.yaxis.set_ticks_position('left') # y轴用左边的边框代替,默认是这样

ax.spines['bottom'].set_position(('data',0)) # x轴在y轴,0的位置

ax.spines['left'].set_position(('data',0)) # y轴在x轴,0的位置

# annotation 注释,我们注释在交点

# emm,我手算出来,暂时没考虑样自动计算

# 这个略微有点复杂,用的时候,google下就好

x0 = 1

y0 = 2*x0 -1

plt.scatter(x0,y0,color='green') # 画一个点

plt.plot([x0,x0],[y0,0],color='green',linestyle='--') # 画一条虚线

plt.annotate('intersection is (%d,%d)' % (x0,y0),

xy=(x0,y0),xytext=(x0+0.5,y0-0.5),xycoords='data',

arrowprops=dict(arrowstyle='->', connectionstyle="arc3,rad=.2"))

# plt.text(0,-2,'unused text.')

# 设置透明度

# for label in ax.get_xticklabels() + ax.get_yticklabels():

# # label.set_fontsize(16)

# label.set_bbox(dict(facecolor='white', edgecolor='None', alpha=0.65 ))

plt.legend(loc='best')

plt.show()柱状图注意下,它是如何自动添加lable

代码语言:javascript代码运行次数:0运行复制import matplotlib.pyplot as plt

import numpy as np

n = 12

X = np.arange(n)

Y1 = (1-X/n)*np.random.uniform(0.5,1.0,n)

Y1 = (1-X/n)*np.random.uniform(0.5,1.0,n)

# 由于返回值,进过提取是str,操作小数位数不方便,外面提前处理好

p1 = plt.bar(X,np.round(Y1,2),width=0.8,facecolor='deeppink',label='uniform')

def autolabel(rects):

"""Attach a text label above each bar in *rects*, displaying its height."""

for rect in rects:

height = rect.get_height()

plt.annotate('{}'.format(height),

xy=(rect.get_x() + rect.get_width() / 2, height),

xytext=(0, 3), # 3 points vertical offset

textcoords="offset points",

ha='center', va='bottom')

# 为什么有两个hight

def add_labels(rects):

for rect in rects:

height = rect.get_height()

plt.text(rect.get_x() + rect.get_width()/2,height,height, ha='center', va='bottom')

rect.set_edgecolor('white')

# add_labels(p1)

autolabel(p1)

plt.legend(loc='best')

plt.show() 散点图代码语言:javascript代码运行次数:0运行复制import matplotlib.pyplot as plt

import numpy as np

n = 1024

X = np.random.normal(0,1,1024) # 正态分布

Y = np.random.normal(0,1,1024)

T = np.arctan2(X,Y) # for color

plt.xlim(-1.5,1.5)

plt.ylim(-1.5,1.5)

plt.xticks(())

plt.yticks(())

plt.scatter(X,Y,c=T,alpha=0.65)

plt.show()等高线代码语言:javascript代码运行次数:0运行复制import matplotlib.pyplot as plt

import numpy as np

def f(x,y):

# the height function

return (1-x/2+x**5+y**3)*np.exp(-x**2-y**2)

n = 256

x = np.linspace(-3,3,n)

y = np.linspace(-3,3,n)

X,Y = np.meshgrid(x,y)

# use plt.contourf to filling fontous

plt.contourf(X,Y,f(X,Y),8,alpha=0.75,cmap=plt.cm.hot)

# use plt.contour to add contour lines

C = plt.contour(X,Y,f(X,Y),8,color='black',linewidt=0.5)

# add lable

# 这个label比以前的好加

plt.clabel(C,inline=True,fontsize=10)

plt.xticks(())

plt.yticks(())

plt.show()图形很多,用的时候,搜索下就好,偷懒 。🐶

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/130432.html原文链接:https://javaforall.cn

篮球12345号位什么意思?结合灌篮高手、CBA、NBA快速了解
刘金莉:为理想插上翅膀的追梦人