J'ai le cadre de données suivant
import pandas as pd
import matplotlib.pyplot as plt
datas = [['RAC1','CD0287',1.52,9.88], ['RAC1','CD0695',2.08,10.05],['RAC1','CD0845',2.01,10.2], ['RAC3','CD0258',1.91,9.8], ['RAC3','CD471',1.66,9.6], ['RAC8','CD0558',1.32,9.3], ['RAC8','CD0968',2.89,10.01]]
labels = ['Plate', 'Sample', 'LogRatio', 'Strength']
df = pd.DataFrame(data = datas, columns=labels, index=[8, 3, 5, 4, 12, 44, 2])
print(df)
Plate Sample LogRatio Strength
8 RAC1 CD0287 1.52 9.88
3 RAC1 CD0695 2.08 10.05
5 RAC1 CD0845 2.01 10.20
4 RAC3 CD0258 1.91 9.80
12 RAC3 CD471 1.66 9.60
44 RAC8 CD0558 1.32 9.30
2 RAC8 CD0968 2.89 10.01
Comme vous pouvez le voir, mes données sont réparties sur différentes plaques. Je voudrais créer autant de graphiques que j'ai de plaques différentes : 3 graphiques. Et sur chaque parcelle, je voudrais colorer une plaque en rouge et les autres en noir.
Le seul moyen que j'ai trouvé jusqu'à présent, est de le faire manuellement en écrivant le code pour chaque plaque, et de changer la plaque rouge pour l'exécution de la recherche (j'ai plus de 30 plaques en réalité donc cela prend trop de temps). Je peux toujours vous montrer mon code si cela peut vous aider à comprendre :
def getIndexPlates(df):
listIndicesAllPlates = []
df = df.reset_index()
for name,group in df.groupby("Plate"):
temp_list = []
temp_list.append(name)
temp_list.append(group.index.tolist()) #create a tuple with the name of the plate and the index of all the samples in this plate
listIndexAllPlates.append(temp_list)
return listIndexAllPlates
def plotting(df,listIndexAllPlates):
plt.clf()
ax=plt.gca()
datas = df[["LogRatio", "Strength"]].as_matrix()
for sample in range(len(datas)):
if sample in listIndexAllPlates[0][1]: #if the sample is on the the first tuple of my list -> on the first plate
ax.scatter(datas[sample,0], datas[sample,1], alpha=0.8, facecolors='none', edgecolors='red')
if sample in listIndexAllPlates[1][1]:
ax.scatter(datas[sample,0], datas[sample,1], alpha=0.8, facecolors='none', edgecolors='black')
if sample in listIndexAllPlates[2][1]:
ax.scatter(datas[sample,0], datas[sample,1], alpha=0.8, facecolors='none', edgecolors='black')
plt.show()
listIndexAllPlates = getIndexPlates(df)
plotting(df,listIndexAllPlates)
J'ai donc ici mon premier tracé avec la plaque 'RAC1' en rouge et RAC3 et RAC8 en noir, et maintenant je voudrais avoir le deuxième tracé avec RAC3 en rouge (RAC1 et RAC8 en noir) et le troisième tracé avec RAC8 en rouge (RAC1 et RAC3 en noir). Pour ce faire, je change manuellement la couleur dans ma fonction, mais j'aimerais trouver une solution pour le faire automatiquement. Et je sais que ma méthode est vraiment mauvaise et laide, mais je ne sais pas comment faire.