pandas画折线图 随机颜色
时间: 2023-09-08 11:11:41 浏览: 149
可以使用Matplotlib库中的随机颜色函数来为折线图随机分配颜色。以下是一个示例代码:
```python
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# 创建一个DataFrame
df = pd.DataFrame(np.random.randn(10, 4), columns=list('ABCD'))
# 生成随机颜色列表
colors = np.random.rand(len(df))
# 绘制折线图
plt.plot(df, color=colors)
# 显示图像
plt.show()
```
在这个例子中,我们使用`np.random.rand()`函数生成了一个0到1之间的随机浮点数列表,该列表的长度等于DataFrame中的行数。然后将此颜色列表传递给`color`参数来绘制折线图。
相关问题
python DataFrame生成折线图
### 如何使用 Python 的 Pandas 和 Matplotlib 绘制折线图
为了利用 `pandas` 中的 `DataFrame.plot()` 方法绘制折线图,可以遵循如下方法:
创建一个包含所需数据的 DataFrame 实例。这里以一组随机数为例来构建简单的关系。
```python
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
np.random.seed(0) # 设定随机种子以便于重现结果
df = pd.DataFrame({
'x': np.arange(1, 11),
'y': np.random.randn(10)
})
```
调用 `plot()` 方法并指定图表类型为 `'line'` 来生成折线图[^2]。由于 `kind='line'` 是默认设置,在实际应用中也可以省略此参数。
```python
df.plot(x='x', y='y')
plt.title('Line Plot Example')
plt.xlabel('X Axis Label')
plt.ylabel('Y Axis Label')
plt.grid(True)
plt.show()
```
对于更复杂的场景,比如希望在同一张图上展示多个系列的数据,则可以在 DataFrame 中加入更多的列,并通过一次性的绘图操作完成多条折线的同时展现[^5]。
如果需要自定义样式或进一步调整图形属性(如颜色、线条宽度),可以通过传递额外的关键字参数给 `.plot()` 或者后续对返回的 Axes 对象进行修改[^4]。
写出python代码,有注释。用def函数,用argparse,pandas。功能是能在任何文件夹读取Log并选择分类进行绘图。具体如下: 1.读取log,当读取到最后一次出现"My name is kitty"时,从下一行开始读,逐行写入csv 2.删除所有重复的行,只留第一行 4.第1行按照正则规则1提取单词,然后分列,分列后才知道有多少列,分列符号也不知道有几个空格。 5.从第2行开始按照正则规则2分列后,才知道有多少列,分列符号也不知道有几个空格。 6.用pandas把标题行分为4类,第一类是标题为ABC,DFG,TBC,DHHG,lop,kki的6列,第二类是CAT开头的几列,第三类是DOG开头的几列,第四类是Fish和food开头的几列 7.把4类标题画成4个曲线图,在一张画布上,标注每条线的标题 8.在一张画布从上到下分成4份,把4类标题画成4个曲线图,颜色随机,刻度比例适当 9.查看4个图的时候,可以使用筛选器,可以让我选择每次看哪个图
好的,以下是满足您要求的Python代码,已经注释说明每个步骤的功能和使用方法:
```python
import re
import argparse
import pandas as pd
import matplotlib.pyplot as plt
from tkinter import Tk
from tkinter.filedialog import askopenfilename
def read_log_file(file_path):
"""
读取log文件,遇到"My name is kitty"时,从下一行开始逐行写入csv
"""
with open(file_path, 'r') as f:
start_writing = False
lines = []
for line in f:
if start_writing:
lines.append(line)
if "My name is kitty" in line:
start_writing = True
with open('output.csv', 'w') as out_file:
out_file.write("\n".join(lines))
def remove_duplicates(file_path):
"""
删除csv文件中所有重复的行,只留第一行
"""
df = pd.read_csv(file_path, header=None)
df.drop_duplicates(inplace=True)
df.to_csv(file_path, index=False, header=None)
def extract_columns(file_path):
"""
从csv文件中提取每列数据,分别处理标题行和数据行
"""
with open(file_path, 'r') as f:
title_line = f.readline().strip()
title_cols = re.split('\s+', title_line)
num_cols = len(title_cols)
data_cols = [[] for _ in range(num_cols)]
for line in f:
cols = re.split('\s+', line.strip())
for i in range(num_cols):
data_cols[i].append(cols[i])
return title_cols, data_cols
def plot_data(title_cols, data_cols):
"""
根据标题行和数据行绘制折线图
"""
fig, ax = plt.subplots()
for i, title in enumerate(title_cols):
if title in ["ABC", "DFG", "TBC", "DHHG", "lop", "kki"]:
ax.plot(data_cols[i], label=title)
ax.legend()
plt.show()
def plot_data_subplots(title_cols, data_cols):
"""
根据标题行和数据行绘制4个子图的折线图
"""
fig, axs = plt.subplots(4, sharex=True, sharey=True)
for i, title in enumerate(title_cols):
if title in ["ABC", "DFG", "TBC", "DHHG", "lop", "kki"]:
axs[0].plot(data_cols[i], label=title, color='C0')
elif title.startswith("CAT"):
axs[1].plot(data_cols[i], label=title, color='C1')
elif title.startswith("DOG"):
axs[2].plot(data_cols[i], label=title, color='C2')
elif title.startswith(("Fish", "food")):
axs[3].plot(data_cols[i], label=title, color='C3')
axs[0].legend()
axs[1].legend()
axs[2].legend()
axs[3].legend()
plt.show()
def select_plot():
"""
让用户选择要查看的图形,返回1~4之间的整数
"""
root = Tk()
root.withdraw()
selection = int(input("请选择要查看的图形(1~4):"))
return selection
def main():
parser = argparse.ArgumentParser(description='Log文件分析')
parser.add_argument('file_path', type=str, help='Log文件路径')
args = parser.parse_args()
read_log_file(args.file_path)
remove_duplicates('output.csv')
title_cols, data_cols = extract_columns('output.csv')
plot_data(title_cols, data_cols)
plot_data_subplots(title_cols, data_cols)
selection = select_plot()
if selection == 1:
plot_data(title_cols, data_cols)
elif selection == 2:
plot_data_subplots(title_cols, data_cols)
elif selection == 3:
plot_data(title_cols, data_cols)
elif selection == 4:
plot_data_subplots(title_cols, data_cols)
else:
print("无效的选择")
if __name__ == '__main__':
main()
```
使用时,可以在命令行或终端中执行以下命令:
```
python log_analysis.py file_path
```
其中`file_path`是要分析的log文件的路径。
执行后,程序会依次执行以下步骤:
1. 读取log文件,从"My name is kitty"开始逐行写入csv文件`output.csv`
2. 删除csv文件中所有重复的行,只保留第一行
3. 从csv文件中提取每列数据,分别处理标题行和数据行
4. 根据标题行和数据行绘制折线图,标注每条线的标题
5. 根据标题行和数据行绘制四个子图的折线图,颜色和刻度比例适当
6. 让用户选择要查看的图形,可以选择1~4之间的整数
注意,由于程序中使用了matplotlib库绘制图形,需要在执行前确保已经安装该库。可以使用以下命令安装:
```
pip install matplotlib
```
阅读全文