Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
498 views
in Technique[技术] by (71.8m points)

plot - Python pandas, Plotting options for multiple lines

I want to plot multiple lines from a pandas dataframe and setting different options for each line. I would like to do something like

testdataframe=pd.DataFrame(np.arange(12).reshape(4,3))
testdataframe.plot(style=['s-','o-','^-'],color=['b','r','y'],linewidth=[2,1,1])

This will raise some error messages:

  • linewidth is not callable with a list

  • In style I can't use 's' and 'o' or any other alphabetical symbol, when defining colors in a list

Also there is some more stuff which seems weird to me

  • when I add another plot command to the above code testdataframe[0].plot() it will plot this line in the same plot, if I add the command testdataframe[[0,1]].plot() it will create a new plot

  • If i would call testdataframe[0].plot(style=['s-','o-','^-'],color=['b','r','y']) it is fine with a list in style, but not with a list in color

Hope somebody can help, thanks.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

You're so close!

You can specify the colors in the styles list:

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

testdataframe = pd.DataFrame(np.arange(12).reshape(4,3), columns=['A', 'B', 'C'])
styles = ['bs-','ro-','y^-']
linewidths = [2, 1, 4]
fig, ax = plt.subplots()
for col, style, lw in zip(testdataframe.columns, styles, linewidths):
    testdataframe[col].plot(style=style, lw=lw, ax=ax)

Also note that the plot method can take a matplotlib.axes object, so you can make multiple calls like this (if you want to):

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

testdataframe1 = pd.DataFrame(np.arange(12).reshape(4,3), columns=['A', 'B', 'C'])
testdataframe2 = pd.DataFrame(np.random.normal(size=(4,3)), columns=['D', 'E', 'F'])
styles1 = ['bs-','ro-','y^-']
styles2 = ['rs-','go-','b^-']
fig, ax = plt.subplots()
testdataframe1.plot(style=styles1, ax=ax)
testdataframe2.plot(style=styles2, ax=ax)

Not really practical in this case, but the concept might come in handy later.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

2.1m questions

2.1m answers

60 comments

57.0k users

...