2016-09-13 2 views
2

Das folgende Beispiel gibt einen Fehler zurück. Es scheint, dass die Verwendung einer diskreten (nicht kontinuierlichen) Skalierung für die x-Achse in ggplot in Python nicht unterstützt wird.In ggplot für Python, mit diskreten X-Maßstab mit geom_point()?

import pandas as pd 
import ggplot 

df = pd.DataFrame.from_dict({'a':['a','b','c'], 
        'percentage':[.1,.2,.3]}) 

p = ggplot.ggplot(data=df, 
        aesthetics=ggplot.aes(x='a', 
             y='percentage'))\ 
    + ggplot.geom_point() 

print(p) 

Wie bereits erwähnt, diese zurückgibt:

Traceback (most recent call last): 
    File "/Users/me/Library/Preferences/PyCharm2016.1/scratches/scratch_1.py", line 30, in <module> 
    print(p) 
    File "/Users/me/lib/python3.5/site-packages/ggplot/ggplot.py", line 116, in __repr__ 
    self.make() 
    File "/Users/me/lib/python3.5/site-packages/ggplot/ggplot.py", line 627, in make 
    layer.plot(ax, facetgroup, self._aes, **kwargs) 
    File "/Users/me/lib/python3.5/site-packages/ggplot/geoms/geom_point.py", line 60, in plot 
    ax.scatter(x, y, **params) 
    File "/Users/me/lib/python3.5/site-packages/matplotlib/__init__.py", line 1819, in inner 
    return func(ax, *args, **kwargs) 
    File "/Users/me/lib/python3.5/site-packages/matplotlib/axes/_axes.py", line 3838, in scatter 
    x, y, s, c = cbook.delete_masked_points(x, y, s, c) 
    File "/Users/me/lib/python3.5/site-packages/matplotlib/cbook.py", line 1848, in delete_masked_points 
    raise ValueError("First argument must be a sequence") 
ValueError: First argument must be a sequence 

Irgendwelche Abhilfen für die Verwendung von ggplot mit Streuungen auf einer diskreten Skala?

Antwort

1

Eine Option besteht darin, eine fortlaufende Serie zu generieren und die ursprüngliche Variable als Beschriftung zu verwenden. Aber das scheint eine schmerzhafte Umgehungslösung zu sein.

df = pd.DataFrame.from_dict({'a':[0,1,2], 
        'a_name':['a','b','c'], 
        'percentage':[.1,.2,.3]}) 

p = ggplot.ggplot(data=df, 
        aesthetics=ggplot.aes(x='a', 
             y='percentage'))\ 
    + ggplot.geom_point()\ 
    + ggplot.scale_x_continuous(breaks=list(df['a']), 
           labels=list(df['a_name'])) 
0

Ich bekam den gleichen Fehler beim Versuch, 2 Spalten eines Datenrahmens zu plotten. Ich habe die Daten aus einer CSV-Datei gelesen und in einen Datenrahmen konvertiert.

readdata=csv.reader(open(filename),delimiter="\t") 
df= pd.DataFrame(data, columns=header) 
df.columns=["pulseVoltage","dutVoltage","dutCurrent","leakageCurrent"] 
print (df.dtypes) 

Wenn ich die Datentypen überprüft, aus irgendeinem Grund, sie als Objekt dargestellt wurden anstelle von float, die ich erwartet hatte (ich bin ein Neuling und dies könnte trivial Wissen sein, das weiß ich nicht). Daher habe ich eine explizite Konvertierung von Spalten in den Datentyp Float ausgeführt.

Jetzt kann ich mit ggplot die Daten ohne Fehler grafisch darstellen.

print ggplot(df, aes('dutVoltage','dutCurrent'))+ \ 
geom_point() 
Verwandte Themen