0
First, if you want to plot a dot/scatter chart (scatter Plot), use the function plt.scatter
.
In this type of graph, what you need is a sequence indicating the corresponding color of each plotted point. How are you working with a DataFrame
, we can create a new column in it with the values "green"
and "red"
and pass this column with the argument c
(of color) of plt.scatter
.
To generate this column with colors, we can use the method apply
of a column of DataFrame
: as we write col.apply(func)
, the pandas passes each element of the column col
by function func
, returning a column of the same size. Then just write the logic of the function to return "green"
or "red"
according to the input value.
Example:
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
# Gera um DataFrame com coluna Status (200 valores aleatórios entre -1 e 1)
ys = np.random.uniform(-1, 1, 200)
df = pd.DataFrame({"Status": ys})
# Função auxiliar contendo a lógica de como colorir cada ponto
def cor_do_ponto(valor: float) -> str:
"""Retorna a cor de um ponto do gráfico, de acordo com o seu valor."""
if valor > 0:
return "green"
else:
return "red"
# Cria uma nova coluna aplicando a função a cada ponto da coluna Status
df['Color'] = df['Status'].apply(cor_do_ponto)
# Plota o resultado
plt.scatter(df.index, df['Status'], c=df['Color'])
plt.ylabel('Eixo Y')
plt.xlabel('Eixo X')
plt.show()
As the function plt.scatter
need explicit values of the X coordinate of each point, passed the index itself of the DataFrame
, that by default is an increasing numerical sequence going from zero to zero len(df) - 1
.
Ah, a detail: note that, by the logic of our function, if any value is exactly zero your color will be red too.
Upshot: