diese Art von Datendatei vor:Gitter von Histogrammen nach gefilterten Daten
Daten datei.txt
75,15,1,57.5,9.9,5
75,15,1,58.1,10.0,5
75,15,2,37.9,8.3,5
75,15,2,18.2,7.3,5
150,15,1,26.4,8.3,10
150,15,1,31.6,7.9,10
150,15,2,30.6,7.5,10
150,15,2,25.1,7.1,10
, dass Spaltenwerte nur 1,2
beachten 3. sind.
Ich möchte 3x2
-grid von Histogrammen produzieren. Die Subplots unten sehen richtig aus, aber jede Zeile sollte 2 Histogramme aus verschiedenen Datensätzen enthalten, ich meine, ich filtere die Daten gemäß der letzten Spalte.
Der wichtige Code ist ax.hist(X[ (y==grp) & (X[:,2]==1), cols],
, in dem der Filter auftritt.
Ich mag 2 Histogramme in jeder Zeile:
- die 1. Reihe mit
(X[:,2]== *)
wo*
jeder Wert aus der 3. Säule sein (1 oder 2), - die zweite Reihe mit
(X[:,2]==1)
und - der 3. Reihe mit
(X[:,2]==2)
.
Im Lebenslauf erwarte ich, dass am 2. erhalten, 3. Reihen Histogramme für die gefilterten Daten:
3. Spalte Wert = 1
75,15,1,57.5,9.9,5
75,15,1,58.1,10.0,5
150,15,1,26.4,8.3,10
150,15,1,31.6,7.9,10
3. Spalte Wert = 2
75,15,2,37.9,8.3,5
75,15,2,18.2,7.3,5
150,15,2,30.6,7.5,10
150,15,2,25.1,7.1,10
Code:
#!/usr/bin/python
# -*- coding: utf-8 -*-
import pandas as pd
import numpy as np
import math
from matplotlib import pyplot as plt
from itertools import combinations
data_file='data-file.txt'
df = pd.io.parsers.read_csv(
filepath_or_buffer=data_file,
delim_whitespace=False,
)
M, N = df.shape[0], df.shape[1]
feature_dict = {i+1:label for i,label in zip(
range(N),
('L',
'A',
'G',
'P',
'T',
'PP',
))}
df.columns = [l for i,l in sorted(feature_dict.items())]
X = df[range(N-1)].values
y = df['PP'].values
label_dict = dict(enumerate(sorted(list(set(y)))))
label_dict = {x+1:y for x,y in label_dict.iteritems()}
num_grupos = len(label_dict.keys())
grps_to_hist_list = [[j for j in i] for i in combinations(label_dict.keys(), 2)]
grps_to_hist_list_values = [[j for j in i] for i in combinations(label_dict.values(), 2)]
cols_to_hist = [3, 4]
for grps_to_hist in grps_to_hist_list:
grps_str = [ label_dict[grps_to_hist[0]], label_dict[grps_to_hist[1]] ]
print 'creating histogram for groups %s from data file %s' % (grps_str , data_file)
fig, axes = plt.subplots(nrows=3, ncols=2, figsize=(18,8))
for ax,cols in zip(axes.ravel(), cols_to_hist):
# set bin sizes
min_b = math.floor(np.min(X[:,cols]))
max_b = math.ceil(np.max(X[:,cols]))
bins = np.linspace(min_b, max_b, 40)
# ploting the histograms
#"""
for grp,color in zip(grps_str, ('blue', 'red')):
ax.hist(X[ (y==grp) & (X[:,2]==1), cols],
color=color,
label='%s' % grp,
bins=bins,
alpha=0.3,)
ylims = ax.get_ylim()
# plot annotation
leg = ax.legend(loc='upper right', fancybox=True, fontsize=8)
leg.get_frame().set_alpha(0.5)
ax.set_ylim([0, max(ylims)+2])
ax.set_xlabel(feature_dict[cols+1])
ax.set_title('%s' % str(data_file))
# hide axis ticks
ax.tick_params(axis="both", which="both", bottom="off", top="off", labelbottom="on", left="off", right="off", labelleft="on")
# remove axis spines
ax.spines["top"].set_visible(False)
ax.spines["right"].set_visible(False)
ax.spines["bottom"].set_visible(False)
ax.spines["left"].set_visible(False)
#"""
fig.tight_layout()
plt.show()
Hier ist ein Screenshot aus dem obigen Code mit dem Filter (y==grp) & (X[:,2]==1)
(die am 2. Reihe sein sollen).
Ich glaube, Sie die Gründe für eine mißverstanden [MCVE]. Du solltest ** a [mcve] ** erstellen **, weil ** du eine riesige Datei hast, die du nicht teilen kannst. In diesem Fall sieht es so aus, als ob das minimale Beispiel einfach einige Zufallszahlen "np.random.randint" verwenden könnte. Da uns wichtige Variablen wie 'grps_to_hist_list',' cols_to_hist' oder 'label_dict' fehlen, ist es sehr schwierig, Ihnen hier zu helfen. – ImportanceOfBeingErnest
Got 'KeyError: 'Prop''für Zeile 33. Ehrlich gesagt, verstehe nicht, was dein erwartetes Ergebnis ist. Ich nehme an, du weißt das und das ist wahrscheinlich nicht deine Frage. Aber wenn Sie sich fragen, warum die zweite und dritte Zeile keinen Plot haben, liegt das daran, dass Ihr 'zip (grps_str, ('blue', 'red'))' nur 2 Elemente hat. Wenn Sie sich wundern, warum die Bedingung 'y == grp' nicht funktioniert, können Sie vielleicht den KeyError korrigieren und es könnte für andere leichter sein zu verstehen, was' y' ist. –
Eh, hast du es selbst versucht? Zumindest 'TypeError: nicht hashbarer Typ: 'numpy.tarray'' für mich ... Außerdem könnte es hilfreich sein, mehr Details zu den erwarteten Ergebnissen anzugeben. Mein Gesamtgefühl ist nicht zu helfen. Überlassen Sie Experten ... Entschuldigung ... –