teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

3

簡単な例に変えた

2020/02/20 06:43

投稿

Reikirin
Reikirin

スコア23

title CHANGED
@@ -1,1 +1,1 @@
1
- Python グラフ上に表示されない直線のラベルまで表示されてしまう
1
+ Python グラフ上に表示されない直線の凡例まで表示されてしまう
body CHANGED
@@ -1,75 +1,29 @@
1
- Pythonで描いた、複数の直線(k*x + l*y = n*v (k,l,nは整数。vは自分で設定する定数))のグラフを表示するコードとその図載せ
1
+ Pythonで描いた、複数の直線(y = x + m)のグラフを表示するコードを書きした
2
- この時、legend()によって、どの直線かがわかるように(k,l,n)のラベルを付けて表示するのですが、x,yともに範囲を絞っているため、グラフ上に表示されない直線が出てきます。この表示されていない直線のラベルが自動で表示されないようにする方法はあるのでしょうか。お分かりになる方、どうぞよろしくお願いします。
2
+ この時、legend()によって、どの直線かがわかるように凡例を付けて表示するのですが、x,yともに範囲を絞っているため、グラフ上に表示されない直線が出てきます。この表示されていない直線のラベルが自動で表示されないようにする方法はあるのでしょうか。おそらく、legend()の引数を変えるのでしょうが。。。お分かりになる方、どうぞよろしくお願いします。
3
- [補足]
3
+
4
- 図に関してですが、ここでは変数vを10に設定しています。図を見ていただければわかると思いますが、(1,1,-1),(1,1,-2)が明らかにグラフとして表示されていないにも関わらず、ラベルが出てしまっています。
5
4
  ```python
6
5
  import matplotlib.pyplot as plt
7
6
  import numpy as np
8
- from itertools import product
9
- import pandas as pd
10
7
 
11
8
  fig = plt.figure()
12
- ax = fig.add_axes([0.2,0.08,0.35,0.8736]) #←横:縦の比は見た目がいいように設定した
9
+ ax = fig.add_axes([0.25,0.3,0.3,0.6])
13
10
 
14
- z = input(" vの数値を入力してください(10~30 の内の整数で入力してください):")
11
+ x = np.linspace(0, 100, 1000)
15
- judge = str.isdecimal(z)
12
+ for m in range(1,10):
16
- while judge is False or judge is True and not int(z) in range(10,31):
17
- z = input(" 指定された通り(10~30 の内の整数で)入力してください!!!!!!!:")
18
- judge = str.isdecimal(z)
19
- else:
20
- v = int(z)
13
+ y = x + m
14
+ ax.plot(x, y, label=f"y = x + {m}", linestyle='solid')
15
+
16
+ plt.xlabel("x")
17
+ plt.ylabel("y")
21
18
 
22
- K = range(0,4)
23
- L = range(-2,3)
24
- N = range(-4,5)
25
- for k, l, n in product(K, L, N):
26
- #x = np.linspace(20, 120, 1000)
27
- if l == 0:
28
- y = np.linspace(0, 100, 1000)
29
- for m in range(1,5):
30
- if (k,l,n) in [(1,0,m)]:
31
- x = (0 * y + n * v) / k
32
- if m == 1 or m == 2:
33
- ax.plot(x, y, label=f"{(k,l,n)}", linestyle='solid', linewidth=5)
34
- else:
35
- ax.plot(x, y, label=f"{(k,l,n)}", linestyle='dashed')
36
- else:
37
- continue #理屈があり、線の太さを変えている。
38
-
39
- else:
40
- x = np.linspace(20, 120, 1000)
41
- for j in range(-4,5):
42
- if (k,l,n) in [(0,1,j), (1,-2,j), (1,-1,j), (1,1,j), (1,2,j), (2,-1,j), (3,-1,j)]:
43
- y = (- k * x + n * v) / l
44
-
45
- if (k,l,n) in [(1,-1,-2), (1,-1,-1), (1,1,-2), (1,1,-1), (1,1,2)]:
46
- ax.plot(x, y, label=f"{(k,l,n)}", linestyle='solid', linewidth=5)
47
- elif (k,l,n) in [(1,-1,2), (1,-1,1)]:
48
- ax.plot(x, y, label=f"{(k,l,n)}", linestyle='solid', linewidth=2)
49
- elif (k,l,n) in [(0,1,-4), (0,1,-3), (0,1,-2), (0,1,-1), (0,1,0), (1,-1,-4), (1,1,-4), (1,1,-3), (1,1,-2), (1,1,-1), (1,1,0), (1,2,-4), (1,2,-3), (1,2,-2), (1,2,-1), (1,2,0), (1,2,1), (2,-1,-4), (2,-1,-3), (3,-1,-4), (3,-1,-3), (3,-1,-2), (3,-1,-1), (0,1,3), (0,1,4), (1,-2,-4), (1,-2,-3), (1,-2,-2), (2,-1,0), (2,-1,3), (2,-1,4)]:
50
- continue #理屈があって、これらの直線をプロットしないようにした。
51
- else:
52
- ax.plot(x, y, label=f"{(k,l,n)}", linestyle='dashed')
53
-
54
- ax.set_xlim(20, 100)
55
- ax.set_ylim(0, 100)
56
- #ax.grid(True)
57
- else:
58
- continue
59
-
60
- plt.xlabel("ν1", fontsize=20)
61
- plt.ylabel("ν2", fontsize=20)
62
-
63
19
  plt.xticks(fontsize=14)
64
20
 
65
- locs = np.linspace(0, 100, 6)
66
- ytick = np.array(['0','20','40','60','80','100'])
21
+ ax.legend(bbox_to_anchor=(1.1, 1), loc='upper left')
67
22
 
23
+ ax.set_xlim(0, 5)
68
- plt.yticks(locs, ytick, fontsize=14)
24
+ ax.set_ylim(0, 5)
69
25
 
70
- ax.legend(bbox_to_anchor=(1.2, 1), loc='upper left', fontsize=14, borderaxespad=0, ncol=2, title='(k,l,n)', title_fontsize=16)
71
- ax.set_title(f"v = {v}", fontsize=20)
26
+ ax.set_title(f"y = x + m", fontsize=20)
72
27
 
73
28
  plt.show()
74
- ```
29
+ ```
75
- ![イメージ説明](36a83940170f4baf7881ddd1d3e0eaf8.jpeg)

2

誤字

2020/02/20 06:43

投稿

Reikirin
Reikirin

スコア23

title CHANGED
File without changes
body CHANGED
@@ -1,7 +1,7 @@
1
1
  Pythonで描いた、複数の直線(k*x + l*y = n*v (k,l,nは整数。vは自分で設定する定数))のグラフを表示するコードとその図を載せます。
2
2
  この時、legend()によって、どの直線かがわかるように(k,l,n)のラベルを付けて表示するのですが、x,yともに範囲を絞っているため、グラフ上に表示されない直線が出てきます。この表示されていない直線のラベルが自動で表示されないようにする方法はあるのでしょうか。お分かりになる方、どうぞよろしくお願いします。
3
3
  [補足]
4
- 図に関してですが、ここでは変数vを10に設定しています。図を見ていただければわかると思いますが、(1,1,-1),(1,1,-2)などが明らかにグラフとして表示されていないにも関わらず、ラベルが出てしまっています。
4
+ 図に関してですが、ここでは変数vを10に設定しています。図を見ていただければわかると思いますが、(1,1,-1),(1,1,-2)が明らかにグラフとして表示されていないにも関わらず、ラベルが出てしまっています。
5
5
  ```python
6
6
  import matplotlib.pyplot as plt
7
7
  import numpy as np

1

文章の修正

2020/02/18 07:52

投稿

Reikirin
Reikirin

スコア23

title CHANGED
File without changes
body CHANGED
@@ -1,7 +1,7 @@
1
1
  Pythonで描いた、複数の直線(k*x + l*y = n*v (k,l,nは整数。vは自分で設定する定数))のグラフを表示するコードとその図を載せます。
2
2
  この時、legend()によって、どの直線かがわかるように(k,l,n)のラベルを付けて表示するのですが、x,yともに範囲を絞っているため、グラフ上に表示されない直線が出てきます。この表示されていない直線のラベルが自動で表示されないようにする方法はあるのでしょうか。お分かりになる方、どうぞよろしくお願いします。
3
3
  [補足]
4
- 図に関してですが、ここでは変数vを10に設定しています。図を見ていただければわかると思いますが、(1,1,-1),(1,1,-2)などが明らかにグラフにはありせん
4
+ 図に関してですが、ここでは変数vを10に設定しています。図を見ていただければわかると思いますが、(1,1,-1),(1,1,-2)などが明らかにグラフとして表示されていないも関わらず、ラベルが出てしっています
5
5
  ```python
6
6
  import matplotlib.pyplot as plt
7
7
  import numpy as np