画tsne-2d图,为每个类设置指定的颜色与标签,并显示标签

*********************************原创不易,转载请注明出处!*********************************

功能要求:

        1.画一个关于5个类的2维tsne图;

        2.给每个类指定自定义的颜色与名字:

                颜色: 

                hex = ["#c957db", "#dd5f57", "#b9db57", "#57db30", "#5784db"]  # 粉红,暗红,浅绿,绿,蓝

                名字:

                labels=['c0', 'c1', 'c2', 'c3', 'c4']

        3.在右下角显示每个类的标签;

        4.将得到的图像保存到名字为test的文件夹里面,图像的名字为"five_visual_2d.jpg",且图像的清晰度要高;

        我们这里以sklearn中的数字数据集为例,废话不多说,直接上代码,看官可根据如下代码来查看以上功能要求的具体实现细节:

import numpy as np
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt_sne
from sklearn import datasets
from sklearn.manifold import TSNE
import os


def plot_tsne(features, labels, epoch,fileNameDir = None):
    '''
    features:(N*m) N*m大小特征,其中N代表有N个数据,每个数据m维
    label:(N) 有N个标签
    '''
    # 创建目标文件夹
    if not os.path.exists(fileNameDir):
        os.makedirs(fileNameDir)
    import pandas as pd
    tsne = TSNE(n_components=2, init='pca', random_state=0)
    import seaborn as sns

    #查看标签的种类有几个
    class_num = len(np.unique(labels))  # 要分类的种类个数  eg:[0, 1, 2, 3]这个就是为4

    try:
        tsne_features = tsne.fit_transform(features)  # 将特征使用PCA降维至2维
    except:
        tsne_features = tsne.fit_transform(features)

    x_min, x_max = np.min(tsne_features, 0), np.max(tsne_features, 0)
    tsne_features = (tsne_features - x_min) / (x_max - x_min)  # 对数据进行归一化处理
    #一个类似于表格的数据结构
    df = pd.DataFrame()
    df["y"] = labels
    df["comp1"] = tsne_features[:, 0]
    df["comp2"] = tsne_features[:, 1]


    # 颜色是根据标签的大小顺序进行赋色.
    hex = ["#c957db", "#dd5f57","#b9db57","#57db30","#5784db"]  # 绿、红
    data_label = []
    for v in df.y.tolist():
        if v == 0:
            data_label.append("c0")
        elif v == 1:
            data_label.append("c1")
        elif v == 2:
            data_label.append("c2")
        elif v == 3:
            data_label.append("c3")
        elif v == 4:
            data_label.append("c4")

    df["value"] = data_label
    
    # hue=df.y.tolist()
    # hue:根据y列上的数据种类,来生成不同的颜色;
    # style:根据y列上的数据种类,来生成不同的形状点;
    # s:指定显示形状的大小
    sns.scatterplot(x= df.comp1.tolist(), y= df.comp2.tolist(),hue=df.value.tolist(),style = df.value.tolist(),
                    palette=sns.color_palette(hex,class_num),markers= {"c0":".","c1":".","c2":".","c3":".","c4":"."},
                    # s = 10,
                    data=df).set(title="") #T-SNE projection
  

   
    # 指定图注的位置 "lower right"
    plt_sne.legend(loc = "lower right")
    # 不要坐标轴
    plt_sne.axis("off")
    保存图像
    plt_sne.savefig(os.path.join(fileNameDir,"%s.jpg") % str(epoch),format = "jpg",dpi = 300)
    plt_sne.show()
  


if __name__ == '__main__':
    digits = datasets.load_digits(n_class=5)
    features, labels = digits.data, digits.target

    plot_tsne(features, labels, "five_visual_2d", fileNameDir="test")

运行结果

tsne-2d
tsne-2d visualization

  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,首先我们需要使用Java的像处理库来读取片,然后使用字符串处理方法来高亮指定的关键词。以下是一个简单的示例代码: ```java import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.File; import javax.imageio.ImageIO; public class ImageHighlighter { public static void main(String[] args) throws Exception { // 读取片 BufferedImage image = ImageIO.read(new File("image.jpg")); // 设置关键词 String keyword = "Java"; // 获取片的宽度和高度 int width = image.getWidth(); int height = image.getHeight(); // 创建一个新的BufferedImage,并将原复制到新上 BufferedImage newImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics2D g = newImage.createGraphics(); g.drawImage(image, 0, 0, null); // 设置字体样式和颜色 Font font = new Font("Arial", Font.BOLD, 30); Color color = Color.RED; g.setFont(font); g.setColor(color); // 高亮关键词 int x = 100; int y = 100; g.drawString(keyword, x, y); // 保存修改后的片 ImageIO.write(newImage, "jpg", new File("highlighted_image.jpg")); } } ``` 在这个示例中,我们使用ImageIO库读取名为“image.jpg”的片,将其复制到一个新的BufferedImage对象中,然后使用Graphics2D的drawString()方法在指定的位置绘制高亮的关键词。最后,我们将修改后的片保存到名为“highlighted_image.jpg”的文件中。 请注意,这只是一个简单的示例,实际应用中可能需要更复杂的算法来高亮多个关键词或使用不同的高亮方式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值