¿Es posible trazar un solo valor como diagrama de dispersión? Puedo muy bien trazarlo alineando los ccdfs con marcadores, pero quiero saber si hay alguna alternativa disponible.

Entrada:

Entrada 1

tweetcricscore 51 high active

Entrada 2

tweetcricscore 46 event based
tweetcricscore 12 event based
tweetcricscore 46 event based

Entrada 3

tweetcricscore 1 viewers 
tweetcricscore 178 viewers

Entrada 4

tweetcricscore 46 situational
tweetcricscore 23 situational
tweetcricscore 1 situational
tweetcricscore 8 situational
tweetcricscore 56 situational

Puedo escribir mucho código de diagrama de dispersión con bokeh y pandas usando los valores x y y. Pero en caso de un solo valor?

Cuando todas las entradas se fusionan como una entrada y se deben agrupar por col[3], los valores son col[2].

El siguiente código es para el conjunto de datos con 2 variables

import numpy as np
import matplotlib.pyplot as plt
from pylab import*
import math
from matplotlib.ticker import LogLocator
import pandas as pd
from bokeh.charts import Scatter, output_file, show

df = pd.read_csv('input.csv', header = None)

df.columns = ['col1','col2','col3','col4']

scatter = Scatter( df, x='col2', y='col3', color='col4', marker='col4', title='plot', legend=True)

output_file('output.html', title='output')

show(scatter)

Salida de muestra

enter image description here

1
Sitz Blogz 12 may. 2016 a las 21:38

4 respuestas

La mejor respuesta

ACTUALIZACIÓN:

Mire Bokeh y galerías Seaborn: puede ayudarlo a comprender qué tipo de parcela se adapta a sus necesidades

Puedes probar violinplot como esta:

sns.violinplot(x="category", y="val", data=df)

enter image description here

O HeatMaps:

import numpy as np
import pandas as pd
from bokeh.charts import HeatMap, output_file, show

cats = ['active', 'based', 'viewers', 'situational']
df = pd.DataFrame({'val': np.random.randint(1,100, 1000), 'category': np.random.choice(cats, 1000)})

hm = HeatMap(df)
output_file('d:/temp/heatmap.html')
show(hm)
1
MaxU 12 may. 2016 a las 21:09

Puede probar un boxplot o violinplot. Alternativamente, si no le gustan estos y solo desea una distribución vertical de puntos, puede forzar una dispersión para trazar a lo largo de un solo valor de x. Para hacer esto, necesitaría crear una matriz de un valor fijo (digamos 1) que tenga la misma longitud que la matriz que trazará:

ones = []
for range(len(data)):
    ones.append(1)

plt.scatter(ones,data)
plt.show()

Eso te dará algo como esto:

enter image description here

1
Grr 12 may. 2016 a las 19:03

Algo que uso con bastante frecuencia es una "gráfica de tamaño", una visualización similar a la que está solicitando, donde se puede comparar una sola característica en todos los grupos. Aquí hay un ejemplo con sus datos:

a size plot made using matplotlib

Aquí está el código para lograr este diagrama de tamaño:

fig, ax = plt.subplots(1,1, figsize=(8,5))

colors = ['blue','green','orange','pink']

yticks = {"ticks":[],"labels":[]}
xticks = {"ticks":[],"labels":[]}

agg_functions = ["mean","std","sum"]

# Set size plot
for i, (label, group_df) in enumerate(df.groupby('type', as_index=False)):

    # Set tick
    yticks["ticks"].append(i)
    yticks["labels"].append(label)

    agg_values = group_df["tweetcricscore"].aggregate(agg_functions)

    for ii, (agg_f, x) in enumerate(agg_values.iteritems()):
        ax.scatter(x=ii, y = i, label=agg_f, s=x, color=colors[i])


        # Add your x axis
        if ii not in xticks["ticks"]:
            xticks["ticks"].append(ii)
            xticks["labels"].append(agg_f)


# Set yticks:
ax.set_yticks(yticks["ticks"]) 
ax.set_yticklabels(yticks["labels"], fontsize=12)

ax.set_xticks(xticks["ticks"]) 
ax.set_xticklabels(xticks["labels"], fontsize=12)


plt.show()
0
Yaakov Bressler 16 mar. 2020 a las 04:56

Puede trazar el índice en el eje xy el valor de la columna en el eje y

df = pd.DataFrame(np.random.randint(0,10,size=(100, 1)), columns=list('A'))
sns.scatterplot(data=df['A'])

enter image description here

0
Helly 16 mar. 2020 a las 04:11