目录
2.2 xlim()和 ylim():设置 x,y 轴的数值显示范围
2.3 xlabel()和 ylabel():设置 x,y 轴的标签文本
2.5 axhline():绘制平行于 x 轴额度水平参考线
2.8 annotate():添加图形内容细节的指向型注释文本
2.10 . text():添加图形内容细节的无指向型注释文本(水印)
matplotlib 库是 Python 中绘制二维和三维图表的数据可视化工具
特点:
使用简单绘图语句实现复杂绘图效果
以交互式操作实现渐趋精细的图形效果
使用嵌入式 LaTex 输出具有印刷级别的图表、科学表达式和符号文本
对图表的组成元素实现精细化控制
三种绘图接口
pyplot:面向当前图
axes:面向对象
Pylab:沿用 matlab 风格
本篇文章使用plot绘图(展示变量的趋势变化 )展示绘图的基本参数,使用numpy库获得绘图数据(随机),最后出来的图形并非经过仔细思考,一切以展示图形参数为主!!!
使用的库:
import matplotlib.pyplot as plt
import numpy as np
plt.figure(figsize=(10, 10))
x = np.linspace(0.05, 10, 1000) # 在0.05到10的区间中,等差选取1000个,端点不属于
y = np.sin(x)
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.plot(x, y,
color='red',
ls='-',
label='sinx')
plt.show()
2.2 xlim()和 ylim():设置 x,y 轴的数值显示范围使用方法:plt.grid(linestyle, color)
plt.figure(figsize=(10, 10))
x = np.linspace(0.05, 10, 1000) # 在0.05到10的区间中,等差选取1000个,端点不属于
y = np.sin(x)
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.plot(x, y,
color='red',
ls='-',
label='sinx')
plt.xlim(1, 10)
plt.ylim(-1, 1)
plt.xlabel('x轴')
plt.ylabel('y轴')
plt.grid(ls=':',
color='blue') # 设置网格,颜色为蓝色
plt.axhline(0.5, color='green', lw=2, label="分割线") # 绘制平行于x轴的水平参考线,绿色,名称
plt.show()

(上图中绿色的线即为axjline()添加的参考线)
plt.axvspan(xmin=2,
xmax=5,
facecolor='r',
alpha=0.2) # 绘制垂直于x轴的参考区域
即得到(注意:此段是区域)
获取或设置当前 x 轴或 y 轴刻度位置和标签(即设置 x 或 y 轴的标 签)
可以理解为设置xilim和ylim一样的效果,但可以指定范围和距离
plt.xticks(list(range(0, 12, 1))) # 调整刻度范围和刻度标签

注意看x轴,从原来的0~10到现在的0~11,可以通过设置第三个参数设置步长,这里设置为1
函数方法:plt.annotate()
s:注释文本内容
xy:被注释的坐标点
plt.annotate('local',
xy=(2, 1),
xytext=(0.5, 0.5),
weight='bold',
color='red',
xycoords="data",
arrowprops=
dict(arrowstyle="->", connectionstyle='arc3', color='b'),
bbox=
dict(boxstyle="rarrow",
pad=0.6,
fc="yellow",
ec='k',
lw=1,
alpha=0.5)
)

这里的黄色箭头和蓝色细长线即为参数方法添加的参数,实际使用过程中根据自己的实际所需使用,可以认为添加对图像的一些解释
(boxstyle:方框外形;circle:椭圆;darrow:双向箭头;larrow:箭头向左;rarrow:箭
头向右;round:圆角矩形;round4:椭长方形;roundtooth:波浪形边框 1;sawtooth:
函数方法:plt.text()
plt.text(1, 1,
"y=sinx",
weight='bold',
color ='b')
这里设置在坐标(1,1)上,即文字下面y=sinx的蓝色字段
plt.title("正弦函数")

使用方法:plt.legeng()
plt.legend(loc="lower left") # 设置图例位置

import matplotlib.pyplot as plt
import numpy as np
plt.figure(figsize=(10, 10))
x = np.linspace(0.05, 10, 1000) # 在0.05到10的区间中,等差选取1000个,端点不属于
y = np.sin(x)
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.plot(x, y,
color='red',
ls='-',
label='sinx')
plt.xlim(1, 10)
plt.ylim(-1, 1)
plt.xlabel('x轴')
plt.ylabel('y轴')
plt.grid(ls=':',
color='blue') # 设置网格,颜色为蓝色
plt.axhline(0.5, color='green', lw=2, label="分割线") # 绘制平行于x轴的水平参考线,绿色,名称
plt.axvspan(xmin=2,
xmax=5,
facecolor='r',
alpha=0.2) # 绘制垂直于x轴的参考区域
plt.axhspan(ymin=(-3**0.5)/2,
ymax=(3**0.5)/2,
facecolor='w',
alpha=0.2)
plt.legend(loc="lower left") # 设置图例位置
plt.annotate('local',
xy=(2, 1),
xytext=(0.5, 0.5),
weight='bold',
color='red',
xycoords="data",
arrowprops=
dict(arrowstyle="->", connectionstyle='arc3', color='b'),
bbox=
dict(boxstyle="rarrow",
pad=0.6,
fc="yellow",
ec='k',
lw=1,
alpha=0.5)
)
plt.xticks(list(range(0, 12, 1))) # 调整刻度范围和刻度标签
plt.text(1, 1,
"y=sinx",
weight='bold',
color ='b')
plt.title("正弦函数")
plt.show()
这串代码用于显示中文字符
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
无论画什么图,最后都得使用plt.show()用于展示图片,否则输出为空
-:实线样式
--:短横线样式
-.:点划线样式
::虚线样式
.:点标记
O:圆标记
V:倒三角标记
^:正三角标记
<:左三角标记
>:右三角表示
1:下箭头标记13
2:上箭头标记
3:左箭头标记
4:右箭头标记
S:正方形标记
p:五边形标记
*:星形标记
H:六边形标记
+:加号标记
X:x 标记
D:菱形标记
|:竖直线标记
_:水平线标记
b 蓝色
g 绿色
r 红色
c 青色
m 品红色·
y 黄色
k 黑色
w 白色
很多参数有时候用不上,但要知道有,存在即合理,不同参数的作用功能不同,不要任何图都加太多参数,一般有图例、标题,xy轴的范围即可。
无论使用哪个,建议先试试,实践是检验真理的唯一标准!!!
有写的不好的地方希望读者见谅,我也在一步步摸索,有疑问欢迎在评论区讨论
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
exe应该在我打开页面时运行。异步进程需要运行。有什么方法可以在ruby中使用两个参数异步运行exe吗?我已经尝试过ruby命令-system()、exec()但它正在等待过程完成。我需要用参数启动exe,无需等待进程完成是否有任何rubygems会支持我的问题? 最佳答案 您可以使用Process.spawn和Process.wait2:pid=Process.spawn'your.exe','--option'#Later...pid,status=Process.wait2pid您的程序将作为解释器的子进程执行。除
我有一些Ruby代码,如下所示:Something.createdo|x|x.foo=barend我想编写一个测试,它使用double代替block参数x,这样我就可以调用:x_double.should_receive(:foo).with("whatever").这可能吗? 最佳答案 specify'something'dox=doublex.should_receive(:foo=).with("whatever")Something.should_receive(:create).and_yield(x)#callthere
我正在为一个项目制作一个简单的shell,我希望像在Bash中一样解析参数字符串。foobar"helloworld"fooz应该变成:["foo","bar","helloworld","fooz"]等等。到目前为止,我一直在使用CSV::parse_line,将列分隔符设置为""和.compact输出。问题是我现在必须选择是要支持单引号还是双引号。CSV不支持超过一个分隔符。Python有一个名为shlex的模块:>>>shlex.split("Test'helloworld'foo")['Test','helloworld','foo']>>>shlex.split('Test"
我不确定传递给方法的对象的类型是否正确。我可能会将一个字符串传递给一个只能处理整数的函数。某种运行时保证怎么样?我看不到比以下更好的选择:defsomeFixNumMangler(input)raise"wrongtype:integerrequired"unlessinput.class==FixNumother_stuffend有更好的选择吗? 最佳答案 使用Kernel#Integer在使用之前转换输入的方法。当无法以任何合理的方式将输入转换为整数时,它将引发ArgumentError。defmy_method(number)
两者都可以defsetup(options={})options.reverse_merge:size=>25,:velocity=>10end和defsetup(options={}){:size=>25,:velocity=>10}.merge(options)end在方法的参数中分配默认值。问题是:哪个更好?您更愿意使用哪一个?在性能、代码可读性或其他方面有什么不同吗?编辑:我无意中添加了bang(!)...并不是要询问nobang方法与bang方法之间的区别 最佳答案 我倾向于使用reverse_merge方法:option
我有一个只接受一个参数的方法:defmy_method(number)end如果使用number调用方法,我该如何引发错误??通常,我如何定义方法参数的条件?比如我想在调用的时候报错:my_method(1) 最佳答案 您可以添加guard在函数的开头,如果参数无效则引发异常。例如:defmy_method(number)failArgumentError,"Inputshouldbegreaterthanorequalto2"ifnumbereputse.messageend#=>Inputshouldbegreaterthano
我即将开始一个将录制和编辑音频文件的项目,我正在寻找一个好的库(最好是Ruby,但会考虑Java或.NET以外的任何库)以进行实时可视化波形。有人知道我应该从哪里开始搜索吗? 最佳答案 要流入浏览器的数据量很大。Flash或Flex图表可能是唯一能提高内存效率的解决方案。Javascript图表往往会因大型数据集而崩溃。 关于ruby-Ruby中的波形可视化,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.c
我没有找到太多关于如何执行此操作的信息,尽管有很多关于如何使用像这样的redirect_to将参数传递给重定向的建议:action=>'something',:controller=>'something'在我的应用程序中,我在路由文件中有以下内容match'profile'=>'User#show'我的表演Action是这样的defshow@user=User.find(params[:user])@title=@user.first_nameend重定向发生在同一个用户Controller中,就像这样defregister@title="Registration"@user=Use
对于作为String#tr参数的单引号字符串文字中反斜杠的转义状态,我觉得有些神秘。你能解释一下下面三个例子之间的对比吗?我特别不明白第二个。为了避免复杂化,我在这里使用了'd',在双引号中转义时不会改变含义("\d"="d")。'\\'.tr('\\','x')#=>"x"'\\'.tr('\\d','x')#=>"\\"'\\'.tr('\\\d','x')#=>"x" 最佳答案 在tr中转义tr的第一个参数非常类似于正则表达式中的括号字符分组。您可以在表达式的开头使用^来否定匹配(替换任何不匹配的内容)并使用例如a-f来匹配一