pandas


Change color of legend to match line plot matplotlib pandas


Update, edited code to mcve version problem is in line 17.
I am trying to plot a multiple line chart from a .csv file. I have managed to change the default colors in the plot to tableau20 color scheme. When I generate a legend the colors in the legend remain the default colors. If I try to add a color command to the legend code section I get errors. TypeError: init() got an unexpected keyword argument 'color'. Is there a way to match the legend colors to the colors in the main chart body?
Here is the code and a few lines of the data.
import pandas as pd
from pandas import Series, DataFrame
import matplotlib.pyplot as plt
df=pd.read_csv('cch30.csv')
tableau20 = [(31, 119, 180), (174, 199, 232), (255, 127, 14), (255, 187, 120),
(44, 160, 44), (152, 223, 138), (214, 39, 40), (255, 152, 150)]
for i in range(len(tableau20)):
r, g, b = tableau20[i]
tableau20[i] = (r / 255., g / 255., b / 255.)
ax = df.plot(kind='line', x=df.columns[0],y=df.columns[1:8])
species= ['A. bellonorium', 'A. fuscolingua', 'A. mucronata', 'A. depressa', 'A. novazelandia', 'A. spp', 'A. australis']
for rank, column in enumerate(species):
plt.plot(df.Position.values,
df[column.replace("\n", " ")].values,
lw=1, color=tableau20[rank])
lines, labels = ax.get_legend_handles_labels()
#problem in the next line when i try to tell it to use tableau20 by adding color=tableau20[rank]after fontsize
ax.legend(lines[0:8], labels[0:8], loc='best', fontsize=8, color=tableau20[rank])
plt.show()
Position,A. bellonorium,A. fuscolingua,A. mucronata,A. depressa,A. novazelandia,A. spp,A. australis
1,17,9,33,22,15,20,78
2,17,9,33,21,14,22,77
3,17,9,34,20,14,23,78
4,17,9,35,21,12,23,79
5,17,9,34,22,12,24,75
6,17,9,34,22,13,24,75
7,17,9,34,22,13,24,74
8,17,9,34,22,15,24,76
9,16,9,36,20,14,24,76
10,16,9,36,20,15,26,75
11,16,9,37,20,15,27,74
12,16,9,36,21,15,26,74
13,16,9,34,21,15,27,75
14,16,9,34,23,15,27,75
15,16,9,34,24,16,26,75
16,16,9,34,24,16,28,76
17,16,9,33,24,16,28,77
18,15,9,34,24,14,28,77
19,15,9,32,25,14,28,77
20,15,9,32,25,13,28,77
21,15,9,31,25,13,29,79
22,15,9,31,25,13,29,79
23,15,9,32,25,13,29,78
24,15,9,31,25,12,29,79
25,15,9,30,25,12,29,78
26,15,9,30,25,12,28,79
27,15,9,29,24,13,30,80
28,15,9,30,24,13,30,80
29,14,9,29,23,11,30,77
I am not able to run your exact code because I do not have access to the csv that you are using so I'm just guessing as to what your dataframe looks like. But you should be able to adapt the following code to what you need. I tried to make the code as minimum as possible as this will be easier to troubleshoot if you run into issues
import pandas as pd
import matplotlib.pyplot as plt
df = pd.DataFrame([[1, 1, 1], [.5, 1, 2]], columns=['A. bellonorium', 'A. fuscolingua', 'A. mucronata'])
tableau20 = [(31, 119, 180), (255, 152, 150), (255, 127, 14)]
tableau20 = [(r/255, g/255, b/255) for r, g, b in tableau20]
f, ax = plt.subplots()
for rank, column in enumerate(df.columns):
ax.plot(df.index, df[column], color=tableau20[rank], label=column)
ax.legend(loc='best')
the legend method doesn't have a color parameter which is why you were getting the error, I'm not sure why you weren't getting the correct colors in the labels, however you don't need to explicitly state what the colors are, as those are contained in the axes object. You may also want to define the labels in the plotting method so that they show up in the legend. Good luck]1
This code got the result I wanted at this stage. Thanks to all those who helped
import pandas as pd
from pandas import Series, DataFrame
import matplotlib.pyplot as plt
df=pd.read_csv('coveragechart.csv')
tableau20 = [(31, 119, 180), (174, 199, 232), (255, 127, 14), (255, 187, 120),
(44, 160, 44), (152, 223, 138), (214, 39, 40), (255, 152, 150)]
for i in range(len(tableau20)):
r, g, b = tableau20[i]
tableau20[i] = (r / 255., g / 255., b / 255.)
f, ax = plt.subplots()
for rank, column in enumerate(df.columns[1:8]):
ax.plot(df.index, df[column], color=tableau20[rank], label=column)
plt.ylabel('Coverage')
plt.xlabel('Position')
ax.legend(loc='best', fontsize=8)
plt.savefig('cov.png', bbox_inches='tight', dpi=300)
plt.show()

Related Links

procedurally convert interval data to cross sectional data
Pandas Resample Strange Zero Tolerance Behavior
VLOOKUP equivalent function to look up value in pandas DataFrame
pandas dataframe shift dates
ipython dataframe plotting setting color parameter?
How to change string columns size for all columns in pandas hdfstore?
is there an equivalent of data-frame in OCaml?
Pandas option to keep levels after xs operation
Pandas DataFrame Column rename error… am I'm being silly?
Assigning one column to another column between pandas DataFrames (like vector to vector assignment)
Incompatible indexer with Series
data wrangling with Flask: how to do this using SQL language? Does it make sense to use pandas?
Update columns in dataframe inside panel without for loop?
get grouping level in agg function
getting a default value from pandas dataframe when a key is not present
Convert Pandas dataframe to time series

Categories

HOME
client
hive
fluentd
electron
setup-deployment
bs4
multiple-records
etl
leiningen
carthage
try-catch
django-simple-history
ef-migrations
sms-gateway
scichart
swiftlint
jquery-ajaxq
devops
rundeck
dynamic-featured-image
selectedindexchanged
opentype
subdomains
bpel
nouislider
skia
contact-form
gtrendsr
noraui
caret
mapbox-gl
disassembling
twitch
unspecified
leading-zero
greenrobot-eventbus
trim
optix
email-templates
menuitem
prolog-setof
jquery-nestable
clean-architecture
slickedit
dtexec
windows-mobile-6.5
flutterwave
root-framework
google-feed-api
nxt
log4c
thrust
flash-cs5
nsviewcontroller
prettytensor
netmq
separator
collapse
feedback
riak-cs
arcanist
operation
remobjects
formatjs
facebook-graph-api-v2.4
qpainter
aapt
comexception
android-2.2-froyo
viadeo
oam
ccss
ftps
orchardcms-1.7
tinn-r
angularjs-controller
typoscript2
sublist
bitsharp
dice
cascalog
viewswitcher
data-loss
zpt
appender
mongomapper
zend-translate
web-architecture
javap
rtml

Resources

Mobile Apps Dev
Database Users
javascript
java
csharp
php
android
MS Developer
developer works
python
ios
c
html
jquery
RDBMS discuss
Cloud Virtualization
Database Dev&Adm
javascript
java
csharp
php
python
android
jquery
ruby
ios
html
Mobile App
Mobile App
Mobile App