我是最近转换为Python的Matlab用户.我自己管理的大多数Python技能,但是通过绘图,我已经碰壁了,需要一些帮助.
这就是我要做的......
我需要制作一个由3个子图组成的图形,其中包含以下属性:
顺便说一下,我知道如何制作所有这些,只是在一个图中.这就是我现在面临的问题.
例如,这是我理想的子图布局:
import numpy as np
import matplotlib.pyplot as plt
t = np.arange(0.0, 2.0, 0.01)
s1 = np.sin(2*np.pi*t)
s2 = np.exp(-t)
s3 = s1*s2
fig = plt.figure()
ax1 = plt.subplot2grid((4,3), (0,0), colspan=3, rowspan=2)
ax2 = plt.subplot2grid((4,3), (2,0), colspan=3)
ax3 = plt.subplot2grid((4,3), (3,0), colspan=3)
ax1.plot(t,s1)
ax2.plot(t[:150],s2[:150])
ax3.plot(t[30:],s3[30:])
plt.tight_layout()
plt.show()
Run Code Online (Sandbox Code Playgroud)
注意不同子图的x轴是如何未对齐的.我不知道如何在这个图中对齐x轴,但是如果我做这样的事情:
import numpy as np
import matplotlib.pyplot as plt
t = np.arange(0.0, 2.0, 0.01)
s1 = np.sin(2*np.pi*t)
s2 = np.exp(-t)
s3 = s1*s2
fig2, (ax1, …Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个python程序,它显示无限时间的数字,并在按下任何键盘键后关闭它.
实际上,python程序应该像这个Matlab代码一样:
t = 0:0.01:2;
s = sin(2 * pi * t);
plot(t,s)
pause
close
Run Code Online (Sandbox Code Playgroud)
在python中,我能够绘制图形,但键盘输入后没有任何反应.
import numpy as np
import matplotlib.pyplot as plt
t = np.arange(0.0, 2.0, 0.01)
s = np.sin(2*np.pi*t)
#plt.ion()
fig = plt.figure()
plt.plot(t,s)
#plt.show()
plt.draw()
raw_input("PRESS ANY KEY TO CONTINUE.")
plt.close(fig)
Run Code Online (Sandbox Code Playgroud)
到目前为止,我观察到plt.close(fig)它没有做任何事情plt.show().但是,当我使用时plt.draw(),plt.close(fig)正在关闭数字.然而,当我添加raw_input("PRESS ANY KEY TO CONTINUE.")到我的程序中时,该图形根本没有出现.
我究竟做错了什么?
我也试过试验plt.ion(),但没有成功.
在更新我早期的一些代码以使用 pandas.DataFrame 时,我遇到了以下问题......
这是我的原始代码将创建的参考图:
import pandas as pd
import matplotlib.pyplot as plt
a = range(1, 25)
b = a
c = [x+2 for x in b]
d = [x*2 for x in c]
plt.bar(a, d)
plt.bar(a, c)
plt.bar(a, b)
plt.show()
Run Code Online (Sandbox Code Playgroud)
问题定义:
我想使用 pandas.DataFrame 内置功能创建这个非常相同的图。准确地说,只有条形放置是相关的,我对轴刻度的格式/标签不感兴趣。
df = pd.DataFrame({'a': a, 'b': b, 'c': c, 'd': d}, columns=['a', 'b', 'c', 'd'])
df.set_index('a', inplace=True)
df.plot.bar()
plt.show()
Run Code Online (Sandbox Code Playgroud)
无论是默认的熊猫条形图(如上所示)还是添加stacked=True选项(见下文),都不会产生预期的结果。
df.plot.bar(stacked=True)
plt.show()
Run Code Online (Sandbox Code Playgroud)
不幸的是,overlay=True选项不存在。
是否有另一种(最好是优雅的)方法来达到预期的结果?
如果没有其他可用的,我将只修改 pandas.DataFrame 值(即从彼此减去列),然后使用stacked=True选项。在我实施之前,我期待着看到您的建议......
简单的操作,例如舍入数字,创建增加的向量等,在python中无法可靠地完成(参见下面的示例).python社区给出的常见解释是浮点精度.
Python 2.7.11 (default, Sep 29 2016, 13:33:00)
[GCC 5.3.1 20160406 (Red Hat 5.3.1-6)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy
>>> numpy.round(2.5)
2.0
>>> numpy.round(3.5)
4.0
>>> numpy.arange(89,90,0.1)
array([ 89. , 89.1, 89.2, 89.3, 89.4, 89.5, 89.6, 89.7, 89.8, 89.9])
>>> numpy.arange(89+0.1,90,0.1)
array([ 89.1, 89.2, 89.3, 89.4, 89.5, 89.6, 89.7, 89.8, 89.9, 90. ])
>>> numpy.arange(19,20,0.1)
array([ 19. , 19.1, 19.2, 19.3, 19.4, 19.5, 19.6, 19.7, 19.8, 19.9])
>>> numpy.arange(19+0.1,20,0.1)
array([ 19.1, …Run Code Online (Sandbox Code Playgroud)