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

pandas.io.data get_data_yahoo ^DJI retrieval error
“TypeError: only length-1 arrays can be converted to Python scalars”
Pandas resampling hourly timeseries into hourly proportion timeseries
How to customize headers and column widths of DataFrame display?
horizontally centered xlabels for pandas timeseries plotting
drop a single tuple from a multi tuple column
Accessing Row from Previous Day in Pandas Dataframe with Apply
Select a multiple-key cross section from a DataFrame
“Reindexing only valid with uniquely valued Index objects”
How can I divide single values of a dataframe by monthly averages?
How to generate pandas DataFrame column of Categorical from string column?
How to perform key-restricted broadcast-operate-update in Pandas?
partial update to dataframe with Multi-index index with integer labels
IPython Notebook: What is the default encoding?
Append new columns to HDFStore with pandas
Pandas: reindex multiindex, broadcast results

Categories

HOME
yii2
proxy
appx
routes
at-command
programming-languages
survey
retrofit
django-imagekit
paradox
kibana-4
metatrader4
nstableview
carthage
django-simple-history
pugjs
oxyplot
java-3d
chromium-embedded
android-widget
strncpy
elasticsearch-ruby
buck
instant-messaging
media-queries
react-chartjs
google-rich-snippets
siesta-swift
google-qpx-express-api
noraui
lxd
openoffice.org
accelerate-framework
nssegmentedcontrol
file-format
git-merge
automake
webix-treetable
grid.mvc
thin
user-accounts
xml-documentation
hibernate-tools
zip4j
errordocument
nstextview
brightcove
spring-mongodb
dwscript
vtigercrm
gnome-shell-extensions
libpng
savon
fputcsv
clang-static-analyzer
connect-by
testng-dataprovider
sdf
dataview
netmq
freelancer.com-api
dukescript
map-projections
sailfish-os
remobjects
java.util.concurrent
typo3-neos
fmod
coverflow
html4
rabl
pvrtc
unc
rdoc
manchester-syntax
onsubmit
netbeans-6.9
pendrive
punbb
fireworks
gnu-prolog
locationlistener
inotifycollectionchanged
sudzc
paster
gallio
dentrix
getresponsestream
meego
ti-dsp
aquaticprime





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