Python 带颜色条的圆形打印
我尝试用一个颜色条绘制一个圆形图,几乎像这样: 但是,颜色条的最小值当前为1;我希望能够将其设置为0Python 带颜色条的圆形打印,python,dataframe,geometry,colorbar,scatter,Python,Dataframe,Geometry,Colorbar,Scatter,我尝试用一个颜色条绘制一个圆形图,几乎像这样: 但是,颜色条的最小值当前为1;我希望能够将其设置为0 import pandas as pd import matplotlib.pyplot as plt import matplotlib.cm as cm from sklearn import preprocessing df = pd.DataFrame({'A':[1,2,1,2,3,4,2,1,4], 'B':[
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.cm as cm
from sklearn import preprocessing
df = pd.DataFrame({'A':[1,2,1,2,3,4,2,1,4],
'B':[3,1,5,1,2,4,5,2,3],
'C':[4,2,4,1,3,3,4,2,1]})
# set the Colour
x = df.values
min_max_scaler = preprocessing.MinMaxScaler()
x_scaled = min_max_scaler.fit_transform(x)
df_S = pd.DataFrame(x_scaled)
c1 = df['C']
c2 = df_S[2]
colors = [cm.jet(color) for color in c2]
# Graph
plt.figure()
ax = plt.gca()
for a, b, color in zip(df['A'], df['B'], colors):
circle = plt.Circle((a,
b),
1, # Size
color=color,
lw=5,
fill=False)
ax.add_artist(circle)
plt.xlim([0,5])
plt.ylim([0,5])
plt.xlabel('A')
plt.ylabel('B')
ax.set_aspect(1.0)
sc = plt.scatter(df['A'],
df['B'],
s=0,
c=c1,
cmap='jet',
facecolors='none')
plt.grid()
cbar = plt.colorbar(sc)
cbar.set_label('C', rotation=270, labelpad=10)
plt.show()
原问题:
您可以通过摆弄来获得此输出:
fraction = 1/3 # colorbar axis min is 1, max is 4, steps are 0.5
# => 2*(1/6) to get to 0
cbar = plt.colorbar(sc, extend="min", extendfrac=fraction, extendrect=True)
但是扩展名将被取消标记。只需在
plt.scatter()中添加vmin
和vmax
参数即可
如果要根据颜色贴图调整圆的颜色,则需要使用` Normalize(vmin,vmax)并将颜色贴图传递给具有规格化值的圆图
代码如下:
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.cm as cm
from sklearn import preprocessing
from matplotlib.colors import Normalize
df = pd.DataFrame({'A':[1,2,1,2,3,4,2,1,4],
'B':[3,1,5,1,2,4,5,2,3],
'C':[4,2,4,1,3,3,4,2,1]})
# set the Colour
x = df.values
min_max_scaler = preprocessing.MinMaxScaler()
x_scaled = min_max_scaler.fit_transform(x)
df_S = pd.DataFrame(x_scaled)
c1 = df['C']
c2 = df_S[2]
cmap = cm.jet
vmin = 0
vmax = 5 #your max Y is 5, not 4
norm = Normalize(vmin, vmax)
# Graph
plt.figure()
ax = plt.gca()
for a, b in zip(df['A'], df['B']):
circle = plt.Circle((a,
b),
1, # Size
color=cmap(norm(b)),
lw=5,
fill=False)
ax.add_artist(circle)
plt.xlim([0,5])
plt.ylim([0,5])
plt.xlabel('A')
plt.ylabel('B')
ax.set_aspect(1.0)
sc = plt.scatter(df['A'],
df['B'],
s=0,
c=c1,
cmap='jet',
vmin = vmin,
vmax = vmax,
facecolors='none')
plt.grid()
cbar = plt.colorbar(sc)
cbar.set_label('C', rotation=270, labelpad=10)
plt.show()
多亏了alec_djinn,这个答案是:
- 设置颜色栏的最小值和最大值
- 在与颜色栏相同的范围内控制圆圈(变量C)的颜色
这改变了颜色条的最小值,这正是我所要求的。然而,它并没有改变圆圈的颜色。因此,圆圈的颜色必须与颜色栏不一致。我想我需要知道如何在两张图上做相同的事情。是的,这是另一个问题。我在答案中添加了一个解决方案。我不知道为什么,但它现在使用B来设置圆圈的颜色,而不是Ccolor=cmap(norm(b))
它根据b
变量设置颜色,您可以设置任何想要的变量。我假设您想使用b
这是圆中心的Y ax值。
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.cm as cm
from sklearn import preprocessing
from matplotlib.colors import Normalize
df = pd.DataFrame({'A':[1,2,1,2,3,4,2,1,4],
'B':[3,1,5,1,2,4,5,2,3],
'C':[4,2,4,1,3,3,4,2,1]})
# set the Colour
x = df.values
min_max_scaler = preprocessing.MinMaxScaler()
x_scaled = min_max_scaler.fit_transform(x)
df_S = pd.DataFrame(x_scaled)
c1 = df['C']
c2 = df_S[2]
cmap = cm.jet
vmin = 0
vmax = 5 #your max Y is 5, not 4
norm = Normalize(vmin, vmax)
# Graph
plt.figure()
ax = plt.gca()
for a, b in zip(df['A'], df['B']):
circle = plt.Circle((a,
b),
1, # Size
color=cmap(norm(b)),
lw=5,
fill=False)
ax.add_artist(circle)
plt.xlim([0,5])
plt.ylim([0,5])
plt.xlabel('A')
plt.ylabel('B')
ax.set_aspect(1.0)
sc = plt.scatter(df['A'],
df['B'],
s=0,
c=c1,
cmap='jet',
vmin = vmin,
vmax = vmax,
facecolors='none')
plt.grid()
cbar = plt.colorbar(sc)
cbar.set_label('C', rotation=270, labelpad=10)
plt.show()
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.cm as cm
from sklearn import preprocessing
from matplotlib.colors import Normalize
df = pd.DataFrame({'A':[1,2,1,2,3,4,2,1,4],
'B':[3,2,5,1,2,4,5,2,3],
'C':[4,2,4,1,3,3,4,2,1]})
# set the Colour
x = df[['C']].values
min_max_scaler = preprocessing.MinMaxScaler()
x_scaled = min_max_scaler.fit_transform(x)
df_S = pd.DataFrame(x_scaled)
c1 = df['C']
c2 = df_S[0]
cmap = cm.jet # Use the same Cmap
# Set the Colour Scale
vmin = 0
vmax = 5
norm = Normalize(vmin, vmax)
# Graph
plt.figure()
ax = plt.gca()
for a, b, c in zip(df['A'], df['B'], df['C']):
circle = plt.Circle((a,
b),
1, # Size
color=cmap(norm(c)),
lw=5,
fill=False)
ax.add_artist(circle)
plt.xlim([0,5])
plt.ylim([0,5])
plt.xlabel('A')
plt.ylabel('B')
ax.set_aspect(1.0)
sc = plt.scatter(df['A'],
df['B'],
s=0,
c=c1,
cmap='jet', # Use the same Cmap
vmin = vmin,
vmax = vmax,
facecolors='none')
plt.grid()
cbar = plt.colorbar(sc)
cbar.set_label('C', rotation=270, labelpad=20)
plt.show()