使用matplotlib稍微加倍并设置x和y轴滴答。
我有一个VO2和VCO2数据的数据框,我希望将其分散为x = VO2和y = VCO2。 它是逐个呼吸(即原始)数据,因此存在> 400个数据点。 当我这样做时,我得到所有400个数据点的x / y标签。因此,我一直在尝试将x / y刻度间隔设置为从0.0开始,并将0.5增加到相应数据集的最大值。它需要通过一个“动态”图(即x,y标记根据数据的最大值而变化),因为它被合并到一个更大的程序中。
当前代码:
import csv
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
def import_data(fpath):
with open(fpath, 'r') as f:
fdata = csv.reader(f)
fdata = list(fdata)
df = pd.DataFrame(fdata[1:], columns=fdata[0])
df.rename(columns=lambda i: i.replace('\'', ''), inplace=True)
df.columns = [i.lower() for i in df.columns]
df.t = pd.to_timedelta(df.t).dt.total_seconds()
df.rename(columns={'t': 't_culm'}, inplace=True)
df['t'] = df.t_culm - df.t_culm.min()
df.set_index('t', inplace=True)
return df
# import data
data = import_data('_data/mpl_data.csv')
if 'vo2' and 'vco2' in data:
# set x, y variables
x, y = data.vo2, data.vco2
# setup figure
fig, ax = plt.subplots(1, 1)
ax.scatter(x, y)
ax.set_xticks(np.arange(0.0, round(float(x.max())) + 0.5, 0.5))
ax.set_yticks(np.arange(0.0, round(float(y.max())) + 0.5, 0.5))
ax.set_title('V-Slope')
ax.set_xlabel('V\'O2 (L.min-1)')
ax.set_ylabel('V\'CO2 (L.min-1)')
plt.show()
这不是我所期望的 - 最大x和y值分别为4.5和5.0。这限制了情节显示前10/11刻度标签。
有人能说清楚我做错了吗?
修改
下面数据框的.head()
和.tail()
可以下载.csv文件here
t_culm vo2 vco2 ve/vo2 ve/vco2 petco2
t
0.0 121.0 1.39106827 1.17594794 23.27565131 27.53354881 36.28618
2.0 123.0 1.651732905 1.340260757 21.9176962 27.01129598 39.94186
4.0 125.0 1.661732959 1.304045507 21.89457686 27.90005396 40.41926
7.0 128.0 1.74404014 1.424610552 22.36329263 27.37764362 41.9804
9.0 130.0 1.86141934 1.449644274 20.25671442 26.0106846 41.56256
-------------------------------------------------------------------------
685.0 806.0 4.055829465 4.565977319 31.68991968 28.14926598 137.91915
686.0 807.0 4.144702364 4.70023799 32.09388958 28.30061377 142.30906
686.0 807.0 4.11506417 4.617204706 31.28707468 27.88447301 138.67856
687.0 808.0 4.03808704 4.647029051 31.82453689 27.65428161 137.60385
688.0 809.0 3.808044776 4.323517481 31.20141883 27.48142005 127.28648