我在matplotlib中做了一个vlines图,我在数据集中得到了所有的y值>=0.我希望我的y轴最下方可以读取0,但相反,我得到-500.
这是代码:
#!/usr/bin/env python
import numpy as np
from matplotlib import pyplot as plt, dates as mdates
import datetime as dt, time
# Read the data and turn it into a numpy array
#store = map(lambda line: map(int, line.strip().split()), open(name + '.txt').readlines())
store = [
[1293606162197, 0, 0],
[1293605477994, 63, 0],
[1293605478057, 0, 0],
[1293605478072, 2735, 1249],
[1293606162213, 0, 0],
[1293606162229, 0, 0],
]
nstore = np.array(store)
# Get arrays of each columns in the store …Run Code Online (Sandbox Code Playgroud) 当我的数据在我的字典中有完整的日期时,我不知道如何在使用matplotilib绘图时更改日期格式,我只绘制小时,分钟,秒
from datetime import datetime
import matplotlib.pyplot as plt
dico = {'A01': [(u'11/10/12-08:00:01', 2.0), (u'11/10/12-08:10:00', 10.0), \
(u'11/10/12-08:20:01', 5.0), (u'11/10/12-08:30:01', 15.0), \
(u'11/10/12-08:40:00', 7.0), (u'11/10/12-08:50:01', 45.0)],
'A02': [(u'11/10/12-08:00:01', 10.0), (u'11/10/12-08:10:00', 12.0), \
(u'11/10/12-08:20:01', 15.0), (u'11/10/12-08:30:01', 10.0), \
(u'11/10/12-08:40:00', 17.0), (u'11/10/12-08:50:01', 14.0)]}
x = []
y = []
for key in sorted(dico.iterkeys()):
#in Python3
#for key in sorted(dico.keys()):
points = [(datetime.strptime(i[0], "%d/%m/%y-%H:%M:%S"), \
i[1]) for i in dico[key]]
points.sort()
x, y = zip(*points)
plt.plot(x, y, label=key)
# plotting
plt.gcf().autofmt_xdate() …Run Code Online (Sandbox Code Playgroud) 在这个答案使用DateFormatter后,我尝试使用pandas 0.15.0和matplotlib 1.4.2绘制时间序列并用x年标记其x轴:
import datetime as dt
import matplotlib as mpl
import matplotlib.pyplot as plt
import pandas.io.data as pdio
import scipy as sp
t1 = dt.datetime(1960, 1, 1)
t2 = dt.datetime(2014, 6, 1)
data = pdio.DataReader("GS10", "fred", t1, t2).resample("Q", how=sp.mean)
fig, ax1 = plt.subplots()
ax1.plot(data.index, data.GS10)
ax1.set_xlabel("Year")
ax1.set_ylabel("Rate (%)")
ax1.xaxis.set_major_formatter(mpl.dates.DateFormatter("%Y"))
fig.suptitle("10-yr Treasury Rate", fontsize=14)
fig.savefig('test.eps')
Run Code Online (Sandbox Code Playgroud)
最后一行引发错误:OverflowError: Python int too large to convert to C long
使用此回溯:
C:\ Anaconda3\lib\site-packages\IPython\core\formatters.py:239:FormatterWarning:image/png格式化程序中的异常:Python int太大而无法转换为C long FormatterWarning,Traceback(最近一次调用最后一次):
文件"",第1行,在runfile中('D:/username/latex_template/new_pandas_example.py',wdir ='D:/ username/latex_template')
文件"C:\ Anaconda3\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py",第580行,在runfile execfile(filename,namespace)中 …
我们有相当大的文件,1-1.5 GB的原始数据的顺序组合(主要是日志文件),很容易解析的为csv,随后应该被绘制来产生一组图形图像.
目前,我们正在使用bash脚本将原始数据转换为csv文件,只需要绘制数字,然后将其输入到gnuplot脚本中.但这个过程非常缓慢.我试图通过用一个命令替换一些管道cuts,trs等来加速bash脚本awk,虽然这提高了速度,整个事情仍然很慢.
所以,我开始相信这个过程有更好的工具.我目前正在寻找在python + numpy或R中重写这个过程.我的一个朋友建议使用JVM,如果我这样做,我将使用clojure,但我不确定JVM将如何执行.
我在处理这类问题方面没有多少经验,所以关于如何进行的任何建议都会很棒.谢谢.
编辑:另外,我想要存储(到磁盘)生成的中间数据,即csv,所以我不必重新生成它,如果我选择我想要一个不同的图形.
编辑2:原始数据文件每行有一条记录,其字段由分隔符(|)分隔.并非所有字段都是数字.输出csv中我需要的每个字段是通过在输入记录上应用某个公式获得的,输入记录可以使用输入数据中的多个字段.输出csv每行将有3-4个字段,我需要在(可能是)条形图中绘制1-2,1-3,1-4字段的图表.我希望能给出更好的画面.
编辑3:我稍微修改了@ adirau的脚本,似乎工作得很好.我已经足够了,我正在读取数据,发送到处理器线程池(伪处理,将线程名称附加到数据),并通过另一个收集器线程将其聚合到输出文件中.
PS:我不确定这个问题的标记,随时纠正它.
我有以下数据帧:
Time test
0:05 2
0:06 2
0:07 2
0:08 2
0:09 2
0:10 2
0:11 2
Run Code Online (Sandbox Code Playgroud)
该数据帧从0:00开始,到11:59结束.我创建了以下图表:
x = dftestgraph['Time']
y = dftestgraph['test']
plt.ylabel('Number of tasks')
plt.plot(x, y, color="#00a1e4", label="Number of Tasks")
plt.fill(x, y, '#00a1e4', alpha=0.8)
plt.show()
Run Code Online (Sandbox Code Playgroud)
为什么图表底部有一条线,将我填充的图形分成两半?我想将我的x轴格式化为(0:00,0:30,1:00等)我试过:
plt.xticks(0:00, 11:59, 30:00))
Run Code Online (Sandbox Code Playgroud)
但这不起作用.我的问题是: