用python画折线图时的一些tips

一、读取数据

1.read_csv()函数参数:

  • filepath_or_buffer:CSV文件的路径(字符串)或文件对象。
  • sep:字段分隔符,默认为逗号(,)。可以使用其他字符或字符串作为分隔符,例如制表符(\t)。
  • header:指定作为列名的行号,默认为'infer',表示使用文件中的第一行作为列名。可以使用整数值来指定特定行作为列名。
  • index_col:指定作为行索引的列号或列名。默认为None,表示不使用任何列作为行索引。
  • usecols:指定要读取的列号或列名的列表,用于选择特定的列进行读取。
  • dtype:指定列的数据类型。可以是字典形式的列名和数据类型映射,也可以是一个数据类型,将应用于所有列。
  • na_values:将特定值解释为空值(缺失值)的列表或字典。
  • parse_dates:将指定的列解析为日期时间格式。可以是列号或列名的列表。
  • nrows:要读取的行数。默认为None,表示读取所有行。
  • skiprows:要跳过的行数。可以是整数值或行号的列表。
  • encoding:CSV文件的编码方式。
  • header:指定是否存在列名行。默认为'infer',表示自动判断是否存在列名。
  • skip_blank_lines:是否跳过空白行,默认为True
  • quotechar:用于引用字段的字符,默认为双引号(")。
  • skipinitialspace:是否跳过字段前面的空格,默认为False。

注:header参数,我理解的是就是第一行作为列名,seq就是一个分隔符,但是使用了这两个参数,我总是无法从数据中提取一个维度出来,删除之后,就可以了

使用read_csv读取后,数据类型是 <class 'pandas.core.frame.DataFrame'>,方便处理数据

2. with open

这种方式读取数据,可以看到创建了一个csv读取器,读取之后的数据类型是csv的。难以处理,但是可能读取较快 

with open('D:\深度学习\数据集\ETDataset-main\ETT-small\ETTh1.csv', 'r') as file:
    # 创建CSV读取器
    datas= csv.reader(file)

二、iloc和loc用法区别:

  1. iloc(整数位置):

    • 语法:dataframe.iloc[row_index, column_index]
    • iloc主要用于基于整数的索引选择数据。
    • 您可以传递整数值或切片来指定要选择的行和列。
    • 示例:从 DataFrame 中选择第 0 到 4 行(独占)和第 2 到 3 列(独占)。dataframe.iloc[0:5, 2:4]
  2. loc(标签位置):

    • 语法:dataframe.loc[row_label, column_label]
    • loc用于根据基于标签的索引选择数据,这意味着您引用索引标签或列名,而不是整数位置。
    • 您可以传递标签值、切片或布尔条件来指定要选择的行和列。
    • 示例:从 DataFrame 中选择索引标签为“A”到“E”(含)的行和标签为“X”到“Z”(含)的列。dataframe.loc['A':'E', 'X':'Z']

重点区别是索引方式不同,iloc索引时是数字,loc索引是标签 

三、画图不显示汉字问题,添加如下代码即可

import matplotlib.pyplot as plt  
plt.rcParams['font.sans-serif'] = [u'SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  #用来正常显示负号

四、由于数据量大,且每个字符长,占有存储空间大,所以不使用x的原有数值,使用相同大小的整数代替,下边是三种方式。

##1.列表推导式
numbers = [i for i in range(1, len(df)+1)]

##2.Python 的内置函数 range()
numbers = list(range(1, len(df)+1))

##3.循环加入列表
x=[]
for i in range(1,len(df)+1):
    x.append(i)

 五、颜色映射

我创建了一个包含4行1列的图形,并绘制了四条折线图。然后,我尝试使用颜色映射来为每条折线图赋予不同的颜色。配色方案多种多样,针对不同应用场景选择使用。对于数据量较少的,应该采用颜色鲜亮,对比鲜明的颜色。

  1. 'viridis':这是Matplotlib的默认配色方案,在视觉上具有很好的感知性,有较好的连续变化效果。它在色彩空间中变化明显,从低到高依次呈现出深绿、亮绿、黄和橙色。适用于表示渐变或连续的数据。

  2. 'coolwarm':这是一个双色调的配色方案,其中蓝色表示低值,红色表示高值,中间的白色表示中间值。它适用于表示正负变化或对比度。

  3. 'RdYlBu':这是一个红黄蓝的配色方案,适用于表示正负变化或对比度。红色表示高值,黄色表示中间值,蓝色表示低值。

  4. 'Set1''Set2''Set3':这些是一系列明亮且对比度较高的配色方案,每个方案包含多个不同的颜色。它们适用于分类数据,可以很好地区分不同的类别。

  5. 'Pastel':这个配色方案使用了一系列柔和的、带有较低饱和度的颜色。它适用于需要柔和、舒适感的可视化。

# 定义颜色映射
cmap = plt.cm.get_cmap('cool')

# 绘制折线图
axes[0].plot(x, y1,color=cmap(1.0))
axes[1].plot(x, y2,color=cmap(0.8))
axes[2].plot(x, y3,color=cmap(0.5))
axes[3].plot(x, y4,color=cmap(0.4))

# 添加颜色映射的颜色条
sm = plt.cm.ScalarMappable(cmap=cmap, norm=plt.Normalize(vmin=0, vmax=1))
sm.set_array([])
cbar = plt.colorbar(sm, ax=axes)

六、为显示美观

四个子图只显示最上边或最下边的坐标轴刻度,添加一个sharex参数

fig, axes = plt.subplots(4, 1, sharex=True,figsize=(90, 16),dpi=80)

# 隐藏除第一个子图外的其他子图的x轴刻度标签和标签
for ax in axes[:-1]:
    plt.setp(ax.get_xticklabels(), visible=False)
    ax.set_xlabel('')

完整代码如下:

import pandas as pd
import matplotlib.pyplot as plt

data = pd.read_csv('D:\深度学习\数据集\ETDataset-main\ETT-small\ETTh1.csv')
df = data.iloc[3000:8000, 0:].values

x = list(range(1, len(df) + 1))
y1 = df[:, 1]
y2 = df[:, 2]
y3 = df[:, 3]
y4 = df[:, 4]
# plt.figure(figsize=(150, 16),dpi=80)
# 创建一个包含 4 行 1 列的图形,并获取子图对象
fig, axes = plt.subplots(4, 1, sharex=True,figsize=(200, 16),dpi=80)
# 定义颜色映射
cmap = plt.cm.get_cmap('viridis')
# 绘制折线图
axes[0].plot(x, y1,color=cmap(0.9))
axes[1].plot(x, y2,color=cmap(0.7))
axes[2].plot(x, y3,color=cmap(0.4))
axes[3].plot(x, y4,color=cmap(0.2))

# 添加颜色映射的颜色条
sm = plt.cm.ScalarMappable(cmap=cmap, norm=plt.Normalize(vmin=0, vmax=1))
sm.set_array([])
cbar = plt.colorbar(sm, ax=axes)

# 隐藏除第一个子图外的其他子图的x轴刻度标签和标签
for ax in axes[:-1]:
    plt.setp(ax.get_xticklabels(), visible=False)
    ax.set_xlabel('')
plt.xlim(0,5000)
plt.xticks(range(0, 5000, 500))

plt.show()

效果:

  • 23
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值