[PYTHON] Je veux voir le graphique en 3D! Je peux réaliser un tel rêve.

Vous voulez le voir, non?

Fonctions triangulaires, fonctions logarithmiques, cycloïdes ... Il y a tellement de fonctions, de figures et de graphiques différents dans ce monde. Vous voulez voir un tel graphique en 3D, non?

Donc qu'est ce que tu vas faire?

Cette fois, j'aimerais utiliser Blender et Excel. Mettez les données de coordonnées dans le fichier Excel et créez un objet avec Blender basé sur celui-ci. image.png

Maintenant que je comprends comment ça marche ...

Voulez-vous le faire immédiatement?

Environnement de développement

windows 10 python 3.7 Blender 2.8 pip 20.2.1

Créer des données dans Excel

Tout d'abord, installons une bibliothèque qui modifie les fichiers Excel.

$pip install openpyxl

Le code ressemble à ceci

function_3Dgraph.py


import openpyxl
import math

class funcdate():
    def create_wb(self,wb_name):
        new_file=openpyxl.Workbook() #Créez des données pour le fichier Excel.
        new_file.save(wb_name+'.xlsx') #Enregistrez-le une fois.
        print('Le fichier Excel est créé')
        return new_file
    
    def write_wb(self,cell_name,cell_value,file_name):
        file=openpyxl.load_workbook(file_name+'.xlsx',data_only=True) #Chargez le fichier Excel.
        new_wb=file.active #Chargez la feuille.
        new_wb[cell_name]=cell_value #cell_mane(Par exemple A1)Mettez une valeur dans la cellule.

    def write_func(self,t,file_name):
        file=openpyxl.load_workbook(file_name+'.xlsx',data_only=True)
        new_wb=file.active
        print(new_wb)
        for i in range(1,t+1):
            if(i==0):
                i=1
            x=math.cos(i*math.pi/180) #La formule ici peut être n'importe quoi.
            y=math.sin(i*math.pi/180) #La formule ici peut être n'importe quoi.
            new_wb['A'+str(i)]=i #Je mettrai des données dans chaque coordonnée.
            new_wb['B'+str(i)]=x
            new_wb['C'+str(i)]=y
            print(new_wb['A'+str(i)].value,new_wb['B'+str(i)].value,new_wb['C'+str(i)].value)
            
        else:
            file.save(file_name+'.xlsx')
            print('J'ai pu remplir')

    def get_func(self,file_name,t):
        file=openpyxl.load_workbook(file_name+'.xlsx',data_only=True)
        wb=file.active
        graph_t=wb['A'+str(t)].value #Entrez la valeur de chaque cellule dans chaque coordonnée.
        graph_x=wb['B'+str(t)].value
        graph_y=wb['C'+str(t)].value
        a=[graph_t,graph_x,graph_y]
        return a

    
test=funcdate()
test.create_wb('test_function')
test.write_func(360,'test_function')
print(test.get_func('test_function',10))

Lançons-le maintenant.

$python function_3Dgraph.py

Lorsque vous l'exécutez, vous devriez avoir un fichier Excel, veuillez donc l'ouvrir. image.png Ce n'est pas grave si c'est dans le tableau comme ça. Au fait, cela ressemble à ceci dans un graphique. ・ L'axe X et l'axe y sont séparés image.png   ・ Axe X et axe y combiné image.png

Faire un graphique avec Blender

Commençons par télécharger Blender. Télécharger Blender Une fois téléchargé, lancez-le et ouvrez l'éditeur python. ↓ Ici image.png Essayez ensuite de taper le code ci-dessous. Il est facile de voir si vous supprimez le premier cube généré (clé x).

$import bpy
$bpy.ops.mesh.primitive_uv_sphere_add(segments=32, ring_count=16, radius=1.0, calc_uvs=True, enter_editmode=False, align='WORLD', location=(0.0, 0.0, 0.0), rotation=(0.0, 0.0, 0.0))

Si une sphère apparaît aux coordonnées (0.0, 0.0, 0.0), c'est réussi. image.png

Ajoutons-le maintenant

function_3Dgraph.py


import openpyxl
import math
import bpy

class funcdate():
    def create_wb(self,wb_name):
        new_file=openpyxl.Workbook()
        new_file.save(wb_name+'.xlsx')
        print('Le fichier Excel est créé')
        return new_file
    
    def write_wb(self,cell_name,cell_value,file_name):
        file=openpyxl.load_workbook(file_name+'.xlsx',data_only=True)
        new_wb=file.active
        new_wb[cell_name]=cell_value

    def write_func(self,t,file_name):
        file=openpyxl.load_workbook(file_name+'.xlsx',data_only=True)
        new_wb=file.active
        print(new_wb)
        for i in range(1,t+1):
            if(i==0):
                i=1
            x=math.cos(i*math.pi/180)
            y=math.sin(i*math.pi/180)
            new_wb['A'+str(i)]=i
            new_wb['B'+str(i)]=x
            new_wb['C'+str(i)]=y
            print(new_wb['A'+str(i)].value,new_wb['B'+str(i)].value,new_wb['C'+str(i)].value)
            
        else:
            file.save(file_name+'.xlsx')
            print('J'ai pu remplir')

    def get_func(self,file_name,t):
        file=openpyxl.load_workbook(file_name+'.xlsx',data_only=True)
        wb=file.active
        graph_t=wb['A'+str(t)].value
        graph_x=wb['B'+str(t)].value
        graph_y=wb['C'+str(t)].value
        a=[graph_t,graph_x,graph_y]
        return a

    
test=funcdate()
test.create_wb('test_function')
test.write_func(360,'test_function')
for i in range(1,360):
     bpy.ops.mesh.primitive_uv_sphere_add(segments=32, ring_count=16, radius=1.0, calc_uvs=True, enter_editmode=False, align='WORLD', location=test.get_func('test_function',i), rotation=(0.0, 0.0, 0.0))


La bibliothèque bpy ne peut être utilisée qu'avec Blender, alors exécutez-la avec Blender.

** et avant ** Rendons la bibliothèque openpyxl disponible dans Blender.

Explication détaillée sur la façon d'insérer

Commencez en tant qu'administrateur pour utiliser openpyxl avec Blender. (Parce qu'on dit que vous n'avez pas d'autorité ...)

Mettez Blender en mode Script pour exécuter le fichier que vous venez de créer. Vous pouvez toujours y aller. image.png Ouvrez ensuite function_3Dgraph.py et exécutez-le. image.png

Si le graphique sort, c'est un succès! image.png (Le 1m de Blender est petit, donc c'est difficile à comprendre, mais c'est une onde de péché avec une amplitude de 1. Il est plus facile de comprendre si l'amplitude est réglée sur 10.)

Eh bien, le graphique a été complété comme ça.

À propos, les fichiers Excel créés par Blender sont enregistrés dans C: \ Program Files \ Blender Foundation \ Blender 2.83.

De côté

Voici une petite histoire mathématique ... Cette fois, j'ai fait un graphique en représentant x et y avec la variable médiatrice t. La formule ressemble à ceci.

 \left\{
\begin{array}{ll}
x=f(t) \\
y=g(t)
\end{array}
\right. 

Cela créera un graphique 3D de $ y = f (x) $. De plus, si $ t = z $, alors $ ax = by = cz (a, b, c sont des constantes arbitraires) $ et une ligne droite tridimensionnelle peut être créée. … Jusqu'à présent, nous avons parlé de graphes orthogonaux. Alors qu'en est-il du format polaire? Par exemple, supposons que vous ayez une expression comme celle-ci:

r=f(θ)

image.png

La ligne droite représentée par cette équation est décomposée en un axe horizontal (axe x) et un axe vertical (axe y), respectivement. image.png

 \left\{
\begin{array}{ll}
x=f(θ) \cos(θ)\\
y=f(θ) \sin(θ)
\end{array}
\right. 

Vous pouvez maintenant dessiner un graphique polaire.       En fait, c'est une bonne idée d'utiliser un fichier Excel pour tout cela. ~~ Si vous ne l'utilisez pas, k ~~

Alors pourquoi l'avez-vous utilisé, par exemple ... image.png

Il est utilisé lorsque le graphique ne comprend pas une telle formule. S'il existe des valeurs dans le fichier Excel, vous pouvez créer un graphique en vous référant à elles.

image.png Je pense que ça rétrécit un peu, mais ça va. Il n'y a pas de problème si vous le multipliez par n en prenant la valeur ...

Épilogue

Cette fois, j'ai essayé de créer un graphique 3D avec Blender en utilisant Excel. Ensuite, je voudrais déplacer ce graphique comme une animation.

Recommended Posts

Je veux voir le graphique en 3D! Je peux réaliser un tel rêve.
Je souhaite voir une liste de fichiers WebDAV dans le module Requêtes
Je veux rendre le type de dictionnaire dans la liste unique
Je veux ajouter un joli complément à input () en python
Je veux faire de la deuxième ligne le nom de la colonne dans pandas
Je veux imprimer dans la notation d'inclusion
Je veux créer un graphique avec des lignes ondulées au milieu avec matplotlib (je veux manipuler l'impression)
(Matplotlib) Je veux dessiner un graphique avec une taille spécifiée en pixels
J'ai essayé d'afficher la valeur d'altitude du DTM dans un graphique
Si vous voulez être guéri par l'image de Mia Nanasawa, appuyez sur l'API Twitter ♪
Je veux faire de matplotlib un thème sombre
Je veux créer une fenêtre avec Python
Je veux faire un jeu avec Python
Je veux afficher la progression en Python!
Je souhaite créer une file d'attente prioritaire pouvant être mise à jour avec Python (2.7)
Je souhaite définir un cycle de vie dans la définition de tâche d'ECS
Le programme Python est lent! Je veux accélérer! Dans ce cas ...
Je veux voir le nom de fichier de DataLoader
Je souhaite intégrer une variable dans une chaîne Python
Je veux facilement implémenter le délai d'expiration en python
Je veux écrire en Python! (2) Écrivons un test
Même avec JavaScript, je veux voir Python `range ()`!
Je veux échantillonner au hasard un fichier avec Python
Je veux travailler avec un robot en python.
[Python] Je veux faire d'une liste imbriquée un taple
Je veux écrire en Python! (3) Utiliser des simulacres
Je veux utiliser le jeu de données R avec python
Notez ce que vous voulez faire à l'avenir avec Razpai
Je veux créer un éditeur de blog avec l'administrateur de django
Je veux faire une macro de clic avec pyautogui (désir)
Combinez des listes dans un DataFrame avec des pandas
Je veux faire une macro de clic avec pyautogui (Outlook)
J'ai fait un chronomètre en utilisant tkinter avec python
[Visualisation] Je veux dessiner un beau graphique avec Plotly
Je veux aligner les nombres valides dans le tableau Numpy
Je veux créer un Dockerfile pour le moment.
Je ne voulais pas écrire la clé AWS dans le programme
J'ai essayé de créer un site qui permet de voir facilement les informations mises à jour d'Azure
[Voir dans l'image] Comment un débutant kaggle peut passer de "novice" à "contributeur" en 10 minutes.
J'ai essayé de trouver la différence entre A + = B et A = A + B en Python, alors notez
[Twitter] Je veux faire des tweets téléchargés (de mon compte) dans un beau CSV
[Linux] Je souhaite connaître la date à laquelle l'utilisateur s'est connecté
Développement LINEbot, je souhaite vérifier le fonctionnement dans l'environnement local
Je veux créer un système pour éviter d'oublier de serrer la clé 1
Je voulais résoudre le problème ABC164 A ~ D avec Python
[Introduction] Je veux créer un robot Mastodon avec Python! 【Débutants】
Je veux créer un fichier pip et le refléter dans le menu fixe
Je souhaite créer une liste de paramètres à partir du code CloudFormation (yaml)
Je veux réussir le test G dans un mois Jour 1
Je veux connaître la population de chaque pays du monde.
J'ai fait une commande pour afficher un calendrier coloré dans le terminal
Je veux éviter les problèmes de saisie lors du débogage de l'exemple de vérification des compétences de Paiza dans un environnement local tel que Jupyter [Python]
J'ai essayé de créer un système pour acquérir automatiquement le guide des programmes → l'enregistrer dans le calendrier en un jour
Je veux charger le projecteur pytest en tant que bibliothèque ailleurs (pytest peut ne pas exister dans l'environnement)
Je veux utiliser quatre règles compliquées dans l'instruction IF du modèle Django! → Utilisez un modèle personnalisé
[Salut Py (Partie 1)] Je veux faire quelque chose pour le moment, alors commencez par fixer un objectif.
Je veux changer la couleur en cliquant sur le point de dispersion dans matplotlib
Je souhaite envoyer un signal uniquement du sous-thread au thread principal
[Langage C] Je souhaite générer des nombres aléatoires dans la plage spécifiée
J'ai trouvé un moyen de créer un modèle 3D à partir d'une photo.