将散点图上的轴更改为涉及时间的固定间隔
Changing axis on scatterplot to fixed intervals involving time
我有以下代码。我的问题是我想将 y 轴的范围设置为从 0:00 到 12:00 并使其以 1 为增量等距分布。例如0:00、1:00、2:00 等。有什么建议我会如何去做呢?
此外,我还想去掉每个数字末尾的额外 :00。截至目前,它显示为 00:00:00、01:00:00 等等,而我只希望它显示为 0:00、1:00 任何想法我可以去关于这样做?这是我到目前为止的代码。
import pandas as pd
import matplotlib.pyplot as plt
import datetime
data = pd.read_csv('data.csv', sep=',', header=None)
print (data)
ints = data[data[1]=='INT']
exts = data[data[1]=='EXT']
int_times = [datetime.datetime.time(datetime.datetime.strptime(t, '%H:%M')) for t in ints[4]]
ext_times = [datetime.datetime.time(datetime.datetime.strptime(t, '%H:%M')) for t in exts[4]]
int_dist = [d for d in ints[3]]
ext_dist = [d for d in exts[3]]
fig, ax = plt.subplots()
ax.scatter(int_dist, int_times, c='red', s=80)
ax.scatter(ext_dist, ext_times, c='blue', s=80)
plt.legend(['INT', 'EXT'], loc=4)
plt.xlabel('Distance')
plt.ylim(0,45000)
plt.show()
您可以根据需要手动指定刻度。如果没有 csv 数据,我不能 运行 你的例子,但你可以,
import numpy as np
import pylab as plt
import datetime
#Some arbitrary data
x = np.linspace(0.,12.,100)
fig, ax = plt.subplots(1, 1)
ax.plot(x,np.sin(x)+6.)
#Set number of ticks to 12
ax.set_yticks(range(13))
#Relabel the ticks as needed
locs, labels = plt.yticks()
new_labels = [str(time) + ":00" for time in range(0,13)]
plt.yticks(locs, new_labels)
plt.show()
您可以使用从数据中获取的日期时间值或格式化字符串替换新标签(例如,转换为字符串并删除最后一个 0)...
那么可以生成一个只有分和秒的时间列表。您需要将格式更改为“%M:%S”。
接下来您需要使用 plt.xticks() 更改标签。我改变了 x 轴。
这是一个示例
start = datetime.combine(date.today(), time(0, 0))
axis_times = []
y_values = []
i = 0
while i<9:
start += timedelta(seconds=7)
axis_times.append(start.strftime("%M:%S"))
y_values.append(i)
i+=1
fig, ax = plt.subplots()
ax.scatter(range(len(axis_times)), y_values, c='red', s=80)
ax.scatter(range(len(axis_times)), y_values, c='blue', s=20)
plt.legend(['INT', 'EXT'], loc=4)
plt.xlabel('Distance')
plt.xticks(range(len(axis_times)), axis_times, size='small')
plt.show()
我有以下代码。我的问题是我想将 y 轴的范围设置为从 0:00 到 12:00 并使其以 1 为增量等距分布。例如0:00、1:00、2:00 等。有什么建议我会如何去做呢?
此外,我还想去掉每个数字末尾的额外 :00。截至目前,它显示为 00:00:00、01:00:00 等等,而我只希望它显示为 0:00、1:00 任何想法我可以去关于这样做?这是我到目前为止的代码。
import pandas as pd
import matplotlib.pyplot as plt
import datetime
data = pd.read_csv('data.csv', sep=',', header=None)
print (data)
ints = data[data[1]=='INT']
exts = data[data[1]=='EXT']
int_times = [datetime.datetime.time(datetime.datetime.strptime(t, '%H:%M')) for t in ints[4]]
ext_times = [datetime.datetime.time(datetime.datetime.strptime(t, '%H:%M')) for t in exts[4]]
int_dist = [d for d in ints[3]]
ext_dist = [d for d in exts[3]]
fig, ax = plt.subplots()
ax.scatter(int_dist, int_times, c='red', s=80)
ax.scatter(ext_dist, ext_times, c='blue', s=80)
plt.legend(['INT', 'EXT'], loc=4)
plt.xlabel('Distance')
plt.ylim(0,45000)
plt.show()
您可以根据需要手动指定刻度。如果没有 csv 数据,我不能 运行 你的例子,但你可以,
import numpy as np
import pylab as plt
import datetime
#Some arbitrary data
x = np.linspace(0.,12.,100)
fig, ax = plt.subplots(1, 1)
ax.plot(x,np.sin(x)+6.)
#Set number of ticks to 12
ax.set_yticks(range(13))
#Relabel the ticks as needed
locs, labels = plt.yticks()
new_labels = [str(time) + ":00" for time in range(0,13)]
plt.yticks(locs, new_labels)
plt.show()
您可以使用从数据中获取的日期时间值或格式化字符串替换新标签(例如,转换为字符串并删除最后一个 0)...
那么可以生成一个只有分和秒的时间列表。您需要将格式更改为“%M:%S”。
接下来您需要使用 plt.xticks() 更改标签。我改变了 x 轴。
这是一个示例
start = datetime.combine(date.today(), time(0, 0))
axis_times = []
y_values = []
i = 0
while i<9:
start += timedelta(seconds=7)
axis_times.append(start.strftime("%M:%S"))
y_values.append(i)
i+=1
fig, ax = plt.subplots()
ax.scatter(range(len(axis_times)), y_values, c='red', s=80)
ax.scatter(range(len(axis_times)), y_values, c='blue', s=20)
plt.legend(['INT', 'EXT'], loc=4)
plt.xlabel('Distance')
plt.xticks(range(len(axis_times)), axis_times, size='small')
plt.show()