我在“如何从统计学习元素中绘制 k 最近邻分类器的决策边界?” . 在本例中,K-NN 用于将数据分为三类。我特别喜欢它以班级成员的概率作为“信心”的标志。
r并且ggplot似乎做得很好。我想知道,这是否可以在 python 中重新创建?我最初的想法倾向于scikit-learn和matplotlib。这是来自 scikit 的 iris 示例:
print(__doc__)
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap
from sklearn import neighbors, datasets
n_neighbors = 15
# import some data to play with
iris = datasets.load_iris()
X = iris.data[:, :2] # we only take the first two features. We could
# avoid this ugly slicing by using a two-dim dataset
y = iris.target
h …Run Code Online (Sandbox Code Playgroud) 我有以下代码可以生成气泡图,然后将标签作为文本添加到图中:
fig, ax = plt.subplots(figsize = (5,10))
# create data
x = [1,1,1,1,1,1,1,1,1,1]
y = ['A','B','C','D',
'E','F','G','H','I','']
z = [10,20,80,210,390,1050,2180,4690,13040,0]
labels = [1,2,8,21,39,105,218,469,1304]
plt.xlim(0.9,1.1)
for i, txt in enumerate(labels):
ax.annotate(txt, (x[i], y[i]), ha='center', va='center', )
plt.scatter(x, y, s=z*4000, c="#8C4799", alpha=0.3)
Run Code Online (Sandbox Code Playgroud)
我有垂直和水平居中的文本标签(即 1304,469 等),但理想情况下我希望它向右移动,以便远离气泡。我试过ha=right,但它只是轻推它一点点。
有什么我可以用来将它完全远离气泡的东西吗?即代码我可以把它如下for loop:
for i, txt in enumerate(labels):
ax.annotate(txt, (x[i], y[i]), ha='center', va='center', )
Run Code Online (Sandbox Code Playgroud) 我在做
ax = df.plot(x=x_col, y=y_col, style=['o', 'rx'])
Run Code Online (Sandbox Code Playgroud)
但我不喜欢数据点是大圆圈。我有数千个数据点,所以它使情节丑陋。知道如何使点变小,即让它们成为实际的点,而不是圆圈吗?或者对这种散点图有什么替代建议?
我对此感到非常绝望,到目前为止我在 www 上找不到任何东西。
情况是这样的:
到目前为止,一切都按照我想要的方式进行。这是困扰我的事情:
我正在努力解决的是找出绘图点与轴长度的比率。我需要使用点,因为据我所知,散点图的圆圈大小以点值给出。因此,如果假设我的轴从 0 到 10,我需要知道图中中间有多少个点。
有谁能够帮助我?或者还有其他方法可以做到这一点吗?提前致谢。
我已经用谷歌搜索了一个小时左右,但没有找到我要找的东西。这是我在代码中所处的位置。
我使用 BS 将信息拉下来并将其保存到 CSV 文件中。CSV 有 x,y 坐标,我可以将其制作成散点图。
与此类似(大约有 1,500 个数据点,显然有 100 个组合)
x,y
0,6
1,2
0,7
4,6
9,9
0,0
4,4
1,2
ETC。
我想做的是使散点图上的点的大小与它们出现的频率相关。
df = pd.read_csv("book8.csv")
df.plot(kind = 'scatter',x='x',y='y')
plt.show()
Run Code Online (Sandbox Code Playgroud)
这些数组只是 0 到 9 之间的数字。我想将大小调整为 0-9 组合出现的频率。
我目前只有这个,显然它并不是很有用。
https://i.stack.imgur.com/daiXF.jpg
我是否需要将 x 和 y 设置到它们自己的数组中来完成此操作,而不是使用数据框(df)?
import matplotlib.pyplot as plt
import numpy as np
# data
x=["IEEE", "Elsevier", "Others"]
y=[7, 6, 2]
import seaborn as sns
plt.legend()
plt.scatter(x, y, s=300, c="blue", alpha=0.4, linewidth=3)
plt.ylabel("No. of Papers")
plt.figure(figsize=(10, 4))
Run Code Online (Sandbox Code Playgroud)
我想制作一个如图所示的图表。我不确定如何提供期刊和会议类别的数据。(目前,我只包括一个)。另外,我不确定如何为每个类别添加不同的颜色。

在 xy 图表上探索具有多个点的数据集时,我可以调整 alpha 和/或标记大小,以快速直观地了解这些点聚集最密集的位置。但是,当我放大或使窗口变大时,需要不同的 alpha 和/或标记大小来提供相同的视觉印象。
当我放大窗口或放大数据时,如何增加 alpha 值和/或标记大小?我在想,如果我将窗口面积加倍,我可以将标记大小加倍,和/或取 alpha 的平方根;和缩放相反。
请注意,所有点都具有相同的大小和 alpha。理想情况下,该解决方案适用于 plot(),但如果它只能使用 scatter() 完成,那也会有帮助。
现在我正在做一个图形项目,它要求我绘制一个具有特定元素尺寸(以微米为单位)的图像。我正在使用 matplotlib 来完成这项任务。但是,我在尺寸控制方面遇到了一些问题。
我已经计算了所有的绘图数据来描述图像。它基本上是一个散布在网格交叉线上的网格,这个网格中有数百个列和行,每条交叉线的每个轴都有自己的宽度(以微米为单位)。示例图像是这样的:
我尝试了很多方法来控制元素或艺术家的大小。为了使一个像素等于一微米,我为这个数字设置了一个大的 DPI
DPI = 25400
plt.figure(dpi=DPI)
fig = plt.gcf()
size = (
width / DPI,
height / DPI
)
fig.set_size_inches(size)
Run Code Online (Sandbox Code Playgroud)
这可以确保一个像素是一微米。但是,我不知道如何控制像素大小的散点和线宽。默认的sinplt.scatter或linewidthinplt.plot不能帮助控制大小。
我想知道如何使用 matplotlib 以微米为单位控制它,或者我应该更改另一个工具来绘制此图形,甚至是任何其他工具来满足此要求?
matplotlib ×6
python ×6
pandas ×2
python-3.x ×2
scatter-plot ×2
area ×1
axis ×1
bubble-chart ×1
knn ×1
plot ×1
scatter ×1
scikit-learn ×1
seaborn ×1