基本上,我正在根据存储在txt文件中的时间列表(HH:MM:SS,x轴)和浮点值(y轴)绘制图形,如下所示:
[15 55 15, 13.55]
我想根据上次可用时间绘制最后一个浮点值(作为注释文本标签)。使用上面的txt,我想绘制与点datefunc = lambda x: mdates.date2num(datetime.strptime(x.decode("utf-8"), '%H %M %S'))
dates, levels = np.genfromtxt('sensor1Text.txt', # Data to be read
delimiter=8, # First column is 8 characters wide
converters={0: datefunc}, # Formatting of column 0
dtype=float, # All values are floats
unpack=True) # Unpack to several variables
# Configure x-ticks
plot_fs1.set_xticks(dates) # Tickmark + label at every plotted point
plot_fs1.xaxis.set_major_formatter(mdates.DateFormatter('%H:%M:%S'))
plot_fs1.set_ylabel('Fluid (mL)')
plot_fs1.grid(True)
# Format the x-axis for dates (label formatting, rotation)
fs1.autofmt_xdate(rotation= 45)
plot_fs1.plot_date(dates, levels, color='orange', ls='-', marker='o')
对应的“13.55 mL”。
以下是绘制我的图表的代码:
lastxValue= len(dates)-1
lastyValue= len(levels)-1
lastValue = levels[lastyValue]
lastDate = dates[lastxValue]
plot_fs1.annotate(lastValue, (lastDate,
lastValue),xytext=(15, 15),textcoords='offset points')
fs1.tight_layout()
这是我尝试在我上一次绘制的值上绘制注释标签:
{{1}}
这就是我得到的:
注释未完全显示在绘图窗口内,x轴值往往相互重叠。
有什么想法吗?
答案 0 :(得分:1)
为了避免为您绘制的每个点都有x轴条目,您可以使用定位器仅标记图表上的每一分钟。
其次,请避免使用tight_layout()
,而是使用subplots_adjust()
在您需要的地方添加额外的空格。例如:
import numpy as np
import matplotlib
import matplotlib.dates as mdates
import matplotlib.pyplot as plt
datefunc = lambda x: mdates.date2num(datetime.strptime(x.decode("utf-8"), '%H %M %S'))
dates, levels = np.genfromtxt('sensor1Text.txt', # Data to be read
delimiter=8, # First column is 8 characters wide
converters={0: datefunc}, # Formatting of column 0
dtype=float, # All values are floats
unpack=True) # Unpack to several variables
plot_fs1 = plt.gca()
fig = plt.gcf()
p = plt.plot(dates, levels)
plot_fs1.set_xticks(dates) # Tickmark + label at every plotted point
plot_fs1.xaxis.set_major_formatter(mdates.DateFormatter('%H:%M'))
plot_fs1.xaxis.set_major_locator(matplotlib.dates.MinuteLocator())
plot_fs1.set_ylabel('Fluid (mL)')
plot_fs1.grid(True)
fig.autofmt_xdate(rotation= 45)
plot_fs1.plot_date(dates, levels, color='orange', ls='-', marker='o')
lastxValue = len(dates)-1
lastyValue = len(levels)-1
lastValue = levels[lastyValue]
lastDate = dates[lastxValue]
plot_fs1.annotate("{} mL".format(lastValue), (lastDate, lastValue), xytext=(15, 15), textcoords='offset points')
fig.subplots_adjust(bottom=0.15, right=0.85) # Add space at bottom and right
plt.show()
这会给你一个图表:
答案 1 :(得分:0)
一种选择是使用与this question类似的方法,并使独立且线性间隔 xticks
,并使用日期作为刻度的名称。
这个问题使用了条形图,但你可以用几秒钟的差异来看看你已经过了多少时间,制作你的标记间距以便覆盖整个时间,但是同样的步骤 。您在积分图中只需要你的时差(有差异间距)。 xticks
以适当的间距变得更好。它还有助于为文本添加额外的空间。